buddy_system_allocator
buddy_system_allocator
— це сторонній крейт, який реалізує базовий системний розподільник між друзями. Його можна використовувати як для LockedHeap
, так і для реалізації GlobalAlloc
, щоб ви могли використовувати стандартний крейт alloc
(як ми бачили раніше), або для виділення іншого адресного простору. Наприклад, ми можемо захотіти виділити простір MMIO для шин 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); }
- Шини PCI завжди мають вирівнювання відповідно до їх розміру.
- Запустіть приклад із
cargo run
уsrc/bare-metal/useful-crates/allocator-example/
. (Він не працюватиме на Rust Playground через залежність від крейту.)