alloc
Para utilizar alloc, debes implementar un asignador global (de heap).
#![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() { // SAFETY: `HEAP` is only used here and `entry` is only called once. unsafe { // Proporciona al asignador algo de memoria para asignar. HEAP_ALLOCATOR.lock().init(HEAP.as_mut_ptr() as usize, HEAP.len()); } // Ahora podemos llevar a cabo acciones que requieran la asignación de montículo. let mut v = Vec::new(); v.push("A string".to_string()); }
buddy_system_allocatores un crate de terceros que implementa un buddy system allocator (una técnica de asignación de memoria) básico. Hay otros crates disponibles, pero también puedes escribir el tuyo propio o conectarte a tu asignador.- El parámetro const de
LockedHeapes el orden máximo del asignador. Es decir, en este caso, puede asignar regiones de hasta 2**32 bytes. - Si algún crate del árbol de dependencias depende de
alloc, debes tener exactamente un asignador global definido en el binario. Esto se suele hacer en el crate binario de nivel superior. extern crate panic_halt as _es necesario para asegurar que el cratepanic_haltesté vinculado y así podamos obtener su controlador de panic.- Este ejemplo se compilará pero no se ejecutará, ya que no cuenta con un punto de entrada.