Expand description
A no_std
bump allocator sourcing space from a user-provided mutable
slice rather than from a global allocator, making it suitable for use
in embedded applications and tight loops.
Drop behavior
Values held in BumpInto
allocations are never dropped. If they must
be dropped, you can use core::mem::ManuallyDrop::drop
or
core::ptr::drop_in_place
to drop them explicitly (and unsafely).
In safe code, you can allocate an Option
and drop the value inside
by overwriting it with None
.
Example
use bump_into::{self, BumpInto};
// allocate 64 bytes of uninitialized space on the stack
let mut bump_into_space = bump_into::space_uninit!(64);
let bump_into = BumpInto::from_slice(&mut bump_into_space[..]);
// allocating an object produces a mutable reference with
// a lifetime borrowed from `bump_into_space`, or gives
// back its argument in `Err` if there isn't enough space
let number: &mut u64 = bump_into
.alloc_with(|| 123)
.ok()
.expect("not enough space");
assert_eq!(*number, 123);
*number = 50000;
assert_eq!(*number, 50000);
// slices can be allocated as well
let slice: &mut [u16] = bump_into
.alloc_n_with(5, core::iter::repeat(10))
.expect("not enough space");
assert_eq!(slice, &[10; 5]);
slice[2] = 100;
assert_eq!(slice, &[10, 10, 100, 10, 10]);
Modules
Types implementing
Into<Option<Layout>>
, for use with
BumpInto::available_spaces
and BumpInto::alloc_space
.Macros
Creates an uninitialized array of
MaybeUninit
without allocating
on the heap, suitable for taking a slice of to pass into
BumpInto::from_slice
.Creates an uninitialized array of one
MaybeUninit
without
allocating on the heap, with the given size and alignment,
suitable for taking a slice of to pass into BumpInto::from_slice
.Creates a zeroed array of
MaybeUninit
without allocating on the
heap, suitable for taking a slice of to pass into
BumpInto::from_slice
.Creates a zeroed array of one
MaybeUninit
without allocating on
the heap, with the given size and alignment, suitable for taking a
slice of to pass into BumpInto::from_slice
.Structs
A bump allocator sourcing space from an
&mut [MaybeUninit]
.