https://github.com/rust-osdev/linked-list-allocator
https://github.com/rust-osdev/linked-list-allocator
Last synced: about 2 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/rust-osdev/linked-list-allocator
- Owner: rust-osdev
- License: apache-2.0
- Created: 2016-01-19T17:46:59.000Z (about 10 years ago)
- Default Branch: main
- Last Pushed: 2024-05-30T08:20:04.000Z (over 1 year ago)
- Last Synced: 2025-03-30T06:07:26.188Z (10 months ago)
- Language: Rust
- Size: 208 KB
- Stars: 227
- Watchers: 8
- Forks: 54
- Open Issues: 10
-
Metadata Files:
- Readme: README.md
- Changelog: Changelog.md
- License: LICENSE-APACHE
Awesome Lists containing this project
README
# linked-list-allocator
[](https://crates.io/crates/linked-list-allocator)
[](https://github.com/rust-osdev/linked-list-allocator/actions?query=workflow%3ABuild)
[](https://docs.rs/linked-list-allocator)
## Usage
Create a static allocator in your root module:
```rust
use linked_list_allocator::LockedHeap;
#[global_allocator]
static ALLOCATOR: LockedHeap = LockedHeap::empty();
```
Before using this allocator, you need to init it:
```rust
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.
[`GlobalAlloc`]: https://doc.rust-lang.org/nightly/core/alloc/trait.GlobalAlloc.html
[`AllocRef`]: https://doc.rust-lang.org/nightly/core/alloc/trait.AllocRef.html
## License
This crate is dual-licensed under MIT or the Apache License (Version 2.0). See LICENSE-APACHE and LICENSE-MIT for details.