buddy_system_allocator
buddy_system_allocator
是實作基本夥伴系統分配器的第三方 Crate。這可供 LockedHeap
實作 GlobalAlloc
,以便使用標準 alloc
Crate,如先前所見,或用來分配其他位址空間。例如,我們可能會想針對 PCI BAR 分配 MMIO 空間:
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); }
- PCI BAR 的對齊情形一律會等於其大小。
- 使用
src/bare-metal/useful-crates/allocator-example/
下的cargo run
執行範例 (在 Playground 中,範例會因為 Crate 依附元件而無法執行)。