Expand description
The arena, a fast but limited type of allocator.
Arenas are a type of allocator that destroy the objects within, all at once, once the arena itself is destroyed. They do not support deallocation of individual objects while the arena itself is still alive. The benefit of an arena is very fast allocation; just a vector push.
This is an equivalent of the old
arena::TypedArena
type that was once distributed with nightly rustc but has since been
removed.
It is slightly less efficient, but simpler internally and uses much less unsafe code.
It is based on a Vec<Vec<T>>
instead of raw pointers and manual drops.
§Example
use typed_arena::Arena;
struct Monster {
level: u32,
}
let monsters = Arena::new();
let vegeta = monsters.alloc(Monster { level: 9001 });
assert!(vegeta.level > 9000);
§Safe Cycles
All allocated objects get the same lifetime, so you can safely create cycles between them. This can be useful for certain data structures, such as graphs and trees with parent pointers.
use std::cell::Cell;
use typed_arena::Arena;
struct CycleParticipant<'a> {
other: Cell<Option<&'a CycleParticipant<'a>>>,
}
let arena = Arena::new();
let a = arena.alloc(CycleParticipant { other: Cell::new(None) });
let b = arena.alloc(CycleParticipant { other: Cell::new(None) });
a.other.set(Some(b));
b.other.set(Some(a));
Structs§
- An arena of objects of type
T
.