# Palloc docs.rs crates.io Portable linked-list allocator for embedded / baremetal systems. ### Using the crate Include this in the `[dependencies]` section of `Cargo.toml` ``` palloc = "0.1.0" ``` This crate uses **unstable features** of Rust, so it requires the `nightly` update channel. Update the toolchain for your project folder with: ``` rustup override set nightly ``` ### Crate features - `spin` (default): provides a GlobalAllocator implementation using a [spin lock](https://crates.io/crates/spin). - `allocator_api` (default): enables the Allocator trait and implements it on all global allocators. ### Example ```rust #![no_std] use core::ptr::NonNull; use palloc::{GlobalPalloc, SpinPalloc}; // the allocator is initialized using a const empty function, but it is // not ready yet, we must initialize it first in main. #[global_allocator] static mut ALLOCATOR: SpinPalloc = SpinPalloc::empty(); fn main() { // First of all we must define the bounds of our heap. Check // Palloc or GlobalPalloc documentation for informations. // Heap starting address let heap_start = 0x8000 as *mut u8; // Heap size let heap_size = 0xF000; // accessing statics is an unsafe operation // so it must be sorrounded by an unsafe block unsafe { ALLOCATOR.init(NonNull::new(heap_start).unwrap(), heap_size) }; // we can now use the heap! // ... } ``` ### Documentation Everything you need to know is already written in the rustdocs. Click on the badge under the readme's title or [click here](https://docs.rs/palloc) to read the full documentation.