pub struct Bump { /* private fields */ }
Expand description
An arena to bump allocate into.
Example
use bumpalo::Bump;
// Create a new bump arena.
let bump = Bump::new();
// Allocate values into the arena.
let forty_two = bump.alloc(42);
assert_eq!(*forty_two, 42);
// Mutable references are returned from allocation.
let mut s = bump.alloc("bumpalo");
*s = "the bump allocator; and also is a buffalo";
Implementations§
source§impl Bump
impl Bump
sourcepub fn reset(&mut self)
pub fn reset(&mut self)
Reset this bump allocator.
Performs mass deallocation on everything allocated in this arena by
resetting the pointer into the underlying chunk of memory to the start
of the chunk. Does not run any Drop
implementations on deallocated
objects; see the BumpAllocSafe
marker
trait for details.
If this arena has allocated multiple chunks to bump allocate into, then the excess chunks are returned to the global allocator.
Example
let mut bump = bumpalo::Bump::new();
// Allocate a bunch of things.
{
for i in 0..100 {
bump.alloc(i);
}
}
// Reset the arena.
bump.reset();
// Allocate some new things in the space previously occupied by the
// original things.
for j in 200..400 {
bump.alloc(j);
}
sourcepub fn alloc<T: BumpAllocSafe>(&self, val: T) -> &mut T
pub fn alloc<T: BumpAllocSafe>(&self, val: T) -> &mut T
sourcepub fn each_allocated_chunk<F>(&mut self, f: F)where
F: for<'a> FnMut(&'a [u8]),
pub fn each_allocated_chunk<F>(&mut self, f: F)where
F: for<'a> FnMut(&'a [u8]),
Call f
on each chunk of allocated memory that this arena has bump
allocated into.
f
is invoked in order of allocation: oldest chunks first, newest
chunks last.
Example
let mut bump = bumpalo::Bump::new();
// Allocate a bunch of things in this bump arena, potentially causing
// additional memory chunks to be reserved.
for i in 0..1000 {
bump.alloc((i, i + 1, i + 2, i + 3));
}
// Iterate over each chunk we've bump allocated into.
bump.each_allocated_chunk(|ch| println!("chunk: {:?}", ch));