buddy_system_allocator
buddy_system_allocator
Ă© um crate de terceiros que implementa um alocador bĂĄsico de sistema buddy. Ele pode ser usado tanto para LockedHeap
implementando GlobalAlloc
para que vocĂȘ possa usar o crate padrĂŁo alloc
(como vimos antes), ou para alocar outro espaço de endereço. Por exemplo, podemos querer alocar espaço MMIO para os BARs PCI:
use buddy_system_allocator::FrameAllocator; use core::alloc::Layout; fn main() { let mut allocator = FrameAllocator::<32>::new(); allocator.add_frame(0x200_0000, 0x400_0000); let layout = Layout::from_size_align(0x100, 0x100).unwrap(); let bar = allocator .alloc_aligned(layout) .expect("Failed to allocate 0x100 byte MMIO region"); println!("Allocated 0x100 byte MMIO region at {:#x}", bar); }
- Os BARs PCI sempre tĂȘm alinhamento igual ao seu tamanho.
- Execute o exemplo com
cargo run
emsrc/bare-metal/useful-crates/allocator-example/
. (NĂŁo executarĂĄ no Playground por causa da dependĂȘncia do crate).