Crates.io | palloc |
lib.rs | palloc |
version | 0.1.3 |
source | src |
created_at | 2021-11-11 13:59:57.507851 |
updated_at | 2021-11-11 17:10:04.651275 |
description | portable linked-list allocator for baremetal systems |
homepage | |
repository | https://github.com/BRA1L0R/palloc |
max_upload_size | |
id | 480168 |
size | 28,009 |
Portable linked-list allocator for embedded / baremetal systems.
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
spin
(default): provides a GlobalAllocator implementation using a spin lock.allocator_api
(default): enables the Allocator trait and implements it on all global allocators.#![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!
// ...
}
Everything you need to know is already written in the rustdocs. Click on the badge under the readme's title or click here to read the full documentation.