An open API service indexing awesome lists of open source software.

https://github.com/bra1l0r/palloc

Portable linked-list allocator designed for baremetal systems
https://github.com/bra1l0r/palloc

allocator no-std rust

Last synced: about 2 months ago
JSON representation

Portable linked-list allocator designed for baremetal systems

Awesome Lists containing this project

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](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.