palloc

Crates.iopalloc
lib.rspalloc
version0.1.3
sourcesrc
created_at2021-11-11 13:59:57.507851
updated_at2021-11-11 17:10:04.651275
descriptionportable linked-list allocator for baremetal systems
homepage
repositoryhttps://github.com/BRA1L0R/palloc
max_upload_size
id480168
size28,009
Pietro Tamilia (BRA1L0R)

documentation

https://docs.rs/palloc

README

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.
  • allocator_api (default): enables the Allocator trait and implements it on all global allocators.

Example

#![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 to read the full documentation.

Commit count: 22

cargo fmt