collam
A naive and thread safe general-purpose allocator written in Rust built with #[no_std].
This project started as an experiment to get comfortable with #[no_std] environments and unsafe Rust.
This library is currently NOT stable and I'm sure there are plenty of bugs, be warned!
A note on its state
Collam implements the GlobalAlloc trait and can be used within Rust.
The sub-crate posix exposes malloc, calloc, realloc, free, malloc_usable_size, mallopt and can be used for arbitrary programs,
in its current state its working with almost all tested programs using LD_PRELOAD.
Tested platforms
[x] Linux x86_64
Implementation details
Bookkeeping is currently done with an intrusive doubly linked list. The overhead for each use allocated block is 16 bytes whereas only 12 bytes of them are used.
Performance
In regards of memory usage/overhead it is comparable to dlmalloc with tested applications, however the performance is not there yet.
Usage within Rust
use collam::alloc::Collam;
#[global_allocator]
static ALLOC: Collam = Collam::new();
fn main() {
let mut vec = Vec::new();
vec.push(42);
assert_eq!(vec.pop().unwrap(), 42);
}Testing collam in C/POSIX environment
Make sure you have Rust nightly. Manually overwrite default allocator:
$ cargo build --manifest-path posix/Cargo.toml --release
$ LD_PRELOAD="$(pwd)/posix/target/release/libcollam.so" kwriteOr use the test script in the root folder:
$ ./scripts/test.sh kwriteThere are some more helper scripts for debugging, profiling, etc. See scripts/ folder.
Execute tests
Tests are not thread safe, make sure to force 1 thread only!
$ cargo test --all-features -- --test-threads 1TODO:
- Proper Page handling
- mmap support
- Thread-local allocation
- Logarithmic-time complexity allocation
- Support for different architectures
- Proper logging

Formed in 2009, the Archive Team (not to be confused with the archive.org Archive-It Team) is a rogue archivist collective dedicated to saving copies of rapidly dying or deleted websites for the sake of history and digital heritage. The group is 100% composed of volunteers and interested parties, and has expanded into a large amount of related projects for saving online and digital history.
