alloc
Π©ΠΎΠ± Π²ΠΈΠΊΠΎΡΠΈΡΡΠΎΠ²ΡΠ²Π°ΡΠΈ alloc
, Π²ΠΈ ΠΏΠΎΠ²ΠΈΠ½Π½Ρ ΡΠ΅Π°Π»ΡΠ·ΡΠ²Π°ΡΠΈ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΈΠΉ ΡΠΎΠ·ΠΏΠΎΠ΄ΡΠ»ΡΠ½ΠΈΠΊ (ΠΊΡΡΡ).
#![no_main] #![no_std] extern crate alloc; extern crate panic_halt as _; use alloc::string::ToString; use alloc::vec::Vec; use buddy_system_allocator::LockedHeap; #[global_allocator] static HEAP_ALLOCATOR: LockedHeap<32> = LockedHeap::<32>::new(); static mut HEAP: [u8; 65536] = [0; 65536]; pub fn entry() { // ΠΠΠΠΠΠΠ: `HEAP` Π²ΠΈΠΊΠΎΡΠΈΡΡΠΎΠ²ΡΡΡΡΡΡ ΡΡΠ»ΡΠΊΠΈ ΡΡΡ Ρ `entry` Π²ΠΈΠΊΠ»ΠΈΠΊΠ°ΡΡΡΡΡ ΡΡΠ»ΡΠΊΠΈ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π·. unsafe { // ΠΠ°ΡΠΈ ΡΠΎΠ·ΠΏΠΎΠ΄ΡΠ»ΡΠ½ΠΈΠΊΡ ΡΡΠΎΡ ΠΈ ΠΏΠ°ΠΌ'ΡΡΡ Π΄Π»Ρ Π²ΠΈΠ΄ΡΠ»Π΅Π½Π½Ρ. HEAP_ALLOCATOR.lock().init(HEAP.as_mut_ptr() as usize, HEAP.len()); } // Π’Π΅ΠΏΠ΅Ρ ΠΌΠΈ ΠΌΠΎΠΆΠ΅ΠΌΠΎ ΡΠΎΠ±ΠΈΡΠΈ ΡΠ΅ΡΡ, ΡΠΊΡ Π²ΠΈΠΌΠ°Π³Π°ΡΡΡ Π²ΠΈΠ΄ΡΠ»Π΅Π½Π½Ρ ΠΊΡΡΡ. let mut v = Vec::new(); v.push("Π ΡΠ΄ΠΎΠΊ".to_string()); }
buddy_system_allocator
β ΡΠ΅ ΡΡΠΎΡΠΎΠ½Π½ΡΠΉ ΠΊΡΠ΅ΠΉΡ, ΡΠΊΠΈΠΉ ΡΠ΅Π°Π»ΡΠ·ΡΡ Π±Π°Π·ΠΎΠ²ΠΈΠΉ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΈΠΉ ΡΠΎΠ·ΠΏΠΎΠ΄ΡΠ»ΡΠ½ΠΈΠΊ ΠΌΡΠΆ Π΄ΡΡΠ·ΡΠΌΠΈ. ΠΠΎΡΡΡΠΏΠ½Ρ ΡΠ½ΡΡ ΠΊΡΠ΅ΠΉΡΠΈ, Π°Π±ΠΎ Π²ΠΈ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π½Π°ΠΏΠΈΡΠ°ΡΠΈ ΡΠ²ΡΠΉ Π²Π»Π°ΡΠ½ΠΈΠΉ Π°Π±ΠΎ ΠΏΡΠ΄ΠΊΠ»ΡΡΠΈΡΠΈ Π΄ΠΎ Π½Π°ΡΠ²Π½ΠΎΠ³ΠΎ ΡΠΎΠ·ΠΏΠΎΠ΄ΡΠ»ΡΠ½ΠΈΠΊΠ°.- ΠΠ°ΡΠ°ΠΌΠ΅ΡΡ const Ρ
LockedHeap
- ΡΠ΅ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΈΠΉ ΠΏΠΎΡΡΠ΄ΠΎΠΊ ΡΠΎΠ·ΠΏΠΎΠ΄ΡΠ»ΡΠ½ΠΈΠΊΠ°, ΡΠΎΠ±ΡΠΎ Ρ ΡΡΠΎΠΌΡ Π²ΠΈΠΏΠ°Π΄ΠΊΡ Π²ΡΠ½ ΠΌΠΎΠΆΠ΅ Π²ΠΈΠ΄ΡΠ»ΡΡΠΈ ΠΎΠ±Π»Π°ΡΡΡ ΡΠΎΠ·ΠΌΡΡΠΎΠΌ Π΄ΠΎ 2**32 Π±Π°ΠΉΡ. - Π―ΠΊΡΠΎ Π±ΡΠ΄Ρ-ΡΠΊΠΈΠΉ ΠΊΡΠ΅ΠΉΡ Ρ Π²Π°ΡΠΎΠΌΡ Π΄Π΅ΡΠ΅Π²Ρ Π·Π°Π»Π΅ΠΆΠ½ΠΎΡΡΠ΅ΠΉ Π·Π°Π»Π΅ΠΆΠΈΡΡ Π²ΡΠ΄
alloc
, ΡΠΎΠ΄Ρ Π²ΠΈ ΠΏΠΎΠ²ΠΈΠ½Π½Ρ ΠΌΠ°ΡΠΈ ΡΠΎΡΠ½ΠΎ ΠΎΠ΄ΠΈΠ½ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΈΠΉ ΡΠΎΠ·ΠΏΠΎΠ΄ΡΠ»ΡΠ½ΠΈΠΊ, Π²ΠΈΠ·Π½Π°ΡΠ΅Π½ΠΈΠΉ Ρ Π²Π°ΡΠΎΠΌΡ Π±ΡΠ½Π°ΡΠ½ΠΎΠΌΡ ΡΠ°ΠΉΠ»Ρ. ΠΠ°Π·Π²ΠΈΡΠ°ΠΉ ΡΠ΅ ΡΠΎΠ±ΠΈΡΡΡΡ Ρ Π±ΡΠ½Π°ΡΠ½ΠΎΠΌΡ ΠΊΡΠ΅ΠΉΡΡ Π²Π΅ΡΡ Π½ΡΠΎΠ³ΠΎ ΡΡΠ²Π½Ρ. extern crate panic_halt as _
Π½Π΅ΠΎΠ±Ρ ΡΠ΄Π½ΠΈΠΉ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΠΎΠ± ΠΏΠ΅ΡΠ΅ΠΊΠΎΠ½Π°ΡΠΈΡΡ, ΡΠΎ Π±ΡΠ΄Π΅ Π·Π²βΡΠ·Π°Π½ΠΎ ΠΊΡΠ΅ΠΉΡpanic_halt
Ρ ΠΌΠΈ ΠΎΡΡΠΈΠΌΠ°ΡΠΌΠΎ ΠΉΠΎΠ³ΠΎ ΠΎΠ±ΡΠΎΠ±Π½ΠΈΠΊ ΠΏΠ°Π½ΡΠΊΠΈ.- Π¦Π΅ΠΉ ΠΏΡΠΈΠΊΠ»Π°Π΄ Π·Π±ΠΈΡΠ°ΡΠΈΠΌΠ΅ΡΡΡΡ, Π°Π»Π΅ Π½Π΅ Π·Π°ΠΏΡΡΠΊΠ°ΡΠΈΠΌΠ΅ΡΡΡΡ, ΠΎΡΠΊΡΠ»ΡΠΊΠΈ Π²ΡΠ½ Π½Π΅ ΠΌΠ°Ρ ΡΠΎΡΠΊΠΈ Π²Ρ ΠΎΠ΄Ρ.