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("A string".to_string());
}
buddy_system_allocatorλ κ°λ¨ν λ²λ μμ€ν ν λΉμλ₯Ό ꡬννλ μλ νν° ν¬λ μ΄νΈμ λλ€. μ΄ μΈμλ, λ€λ₯Έ ν¬λ μ΄νΈλ₯Ό μ¬μ©νκ±°λ, μ§μ ν λΉμλ₯Ό λ§λ€κ±°λ, μ΄λ―Έ μ‘΄μ¬νλ λ€λ₯Έ ν λΉμμ ννΉν μ μμ΅λλ€.LockHeapνμ μ const λ§€κ°λ³μλ ν λΉμμ μ΅λ ν¬κΈ°λ₯Ό 2μ§μλ‘ νννμ λμ μλ¦Ώμμ λλ€. μ¦, μ΄ κ²½μ°μ²λΌ 32μΈ κ²½μ° μ΅λ 2**32λ°μ΄νΈ ν¬κΈ°μ μμμ λ€λ£° μ μμ΅λλ€.- ν λ°μ΄λ리μμ
allocμ μμ‘΄νλ ν¬λ μ΄νΈκ° νλλΌλ μλ€λ©΄ λ°μ΄λ리 μ 체μμ μ μ ν λΉμκ° λ°λμ νλ μ‘΄μ¬ν΄μΌ ν©λλ€. μΌλ°μ μΌλ‘ μ μ ν λΉμλ₯Ό μ μΈνλ μμ μ μ΅μμ λ°μ΄λ리 ν¬λ μ΄νΈμμ μ΄λ£¨μ΄μ§λλ€. panic_haltν¬λ μ΄νΈκ° μ°κ²°λμ΄ ν¨λ νΈλ€λ¬λ₯Ό κ°μ Έμ€λλ‘ νλ €λ©΄extern crate panic_halt as _κ° νμν©λλ€.- μ΄ μμ μ½λλ λΉλλ λμ§λ§, μ§μ μ μ΄ μκΈ° λλ¬Έμ μ€νλμ§λ μμ΅λλ€.