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Ρ ΠΌΠΈ ΠΎΡΡΠΈΠΌΠ°ΡΠΌΠΎ ΠΉΠΎΠ³ΠΎ ΠΎΠ±ΡΠΎΠ±Π½ΠΈΠΊ ΠΏΠ°Π½ΡΠΊΠΈ.- Π¦Π΅ΠΉ ΠΏΡΠΈΠΊΠ»Π°Π΄ Π·Π±ΠΈΡΠ°ΡΠΈΠΌΠ΅ΡΡΡΡ, Π°Π»Π΅ Π½Π΅ Π·Π°ΠΏΡΡΠΊΠ°ΡΠΈΠΌΠ΅ΡΡΡΡ, ΠΎΡΠΊΡΠ»ΡΠΊΠΈ Π²ΡΠ½ Π½Π΅ ΠΌΠ°Ρ ΡΠΎΡΠΊΠΈ Π²Ρ ΠΎΠ΄Ρ.