#allocator #bump-allocator #performance

nightly no-std dodgems

A simple and fast bump allocator library

1 unstable release

0.1.1 Nov 8, 2023
0.1.0 Nov 7, 2023

#752 in Memory management

MIT license

13KB
124 lines

Dodgems - A simple bump allocator library

This crate provides a fast, single-threaded bump allocator for use in performance sensitive contexts.

⚠️ It is not a general purpose allocator: you need to have another (supposedly slower) allocator to back it up. By default, it is the global allocator.

It can be used for quick and dirty allocation in a loop, where you know memory can be reclaimed all at once at the end.

Example

#![feature(allocator_api)]
use dodgems::BumpCar;

let mut bumpcar = BumpCar::new(1024).unwrap(); // 1kB capacity

for i in 0..100 {
    // allocate with the allocator api
    let mut v = Vec::new_in(&bumpcar); 
    v.push(42);
    // small fast allocations in hot loop

    drop(v);
    // reset the capacity once every allocation has been dropped
    bumpcar.reset(); 
}

drop(bumpcar)

Until the allocator_api is stable, this crate requires nightly.


lib.rs:

Dodgems - A simple bump allocator library

This crate provides a fast, single-threaded bump allocator for use in performance sensitive contexts.

⚠️ It is not a general purpose allocator: you need to have another (supposedly slower) allocator to back it up. By default, it is the global allocator.

It can be used for quick and dirty allocation in a loop, where you know memory can be reclaimed all at once at the end.

Example

#![feature(allocator_api)]
use dodgems::BumpCar;

let mut bumpcar = BumpCar::new(1024).unwrap(); // 1kB capacity

for i in 0..100 {
    let mut v = Vec::new_in(&bumpcar); // allocate with the allocator api
    v.push(42);
    // small fast allocations in hot loop
    drop(v);
    bumpcar.reset(); // reset the capacity once every allocation has been dropped
}

drop(bumpcar)

Until the allocator_api is stable, this crate requires the nightly edition.

Features

The (default) alloc feature controls wether the alloc standard crate is used. If you want to use a different allocator and/or do not have a global allocator available, you can disable it.

No runtime deps

Features