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 _
κ° νμν©λλ€.- μ΄ μμ μ½λλ λΉλλ λμ§λ§, μ§μ μ μ΄ μκΈ° λλ¬Έμ μ€νλμ§λ μμ΅λλ€.