#linked-list #allocator #heap #malloc #kernel #no-std

no-std linked_list_allocator

Simple allocator usable for no_std systems. It builds a linked list from the freed blocks and thus needs no additional data structures.

44 releases

Uses old Rust 2015

0.10.5 Mar 4, 2023
0.10.4 Oct 10, 2022
0.10.3 Sep 6, 2022
0.10.1 Jul 7, 2022
0.1.2 Mar 5, 2016

#16 in Memory management

Download history 9686/week @ 2023-12-12 7019/week @ 2023-12-19 4912/week @ 2023-12-26 7339/week @ 2024-01-02 7596/week @ 2024-01-09 9957/week @ 2024-01-16 9762/week @ 2024-01-23 8625/week @ 2024-01-30 8989/week @ 2024-02-06 8836/week @ 2024-02-13 9919/week @ 2024-02-20 9379/week @ 2024-02-27 11156/week @ 2024-03-05 12294/week @ 2024-03-12 13405/week @ 2024-03-19 9059/week @ 2024-03-26

47,651 downloads per month
Used in 62 crates (37 directly)

Apache-2.0/MIT

69KB
1K SLoC

linked-list-allocator

Crates.io Build Status docs.rs

Usage

Create a static allocator in your root module:

use linked_list_allocator::LockedHeap;

#[global_allocator]
static ALLOCATOR: LockedHeap = LockedHeap::empty();

Before using this allocator, you need to init it:

pub fn init_heap() {
    let heap_start =;
    let heap_end =;
    let heap_size = heap_end - heap_start;
    unsafe {
        ALLOCATOR.lock().init(heap_start, heap_size);
    }
}

Features

  • use_spin (default): Provide a LockedHeap type that implements the GlobalAlloc trait by using a spinlock.
  • alloc_ref: Provide an implementation of the unstable AllocRef trait; requires nightly Rust.
    • Warning: The AllocRef trait is still regularly changed on the Rust side, so expect some regular breakage when using this feature.

License

This crate is dual-licensed under MIT or the Apache License (Version 2.0). See LICENSE-APACHE and LICENSE-MIT for details.

Dependencies

~38KB