1个不稳定版本
0.2.0 | 2023年11月28日 |
---|
#534 in 内存管理
9KB
122 行
simple-arena
一个简单的、但快速的单一类型存储分配器。使用它可以使您分配具有相同生命周期的结构体。这对于需要能够相互循环引用的数据结构非常有用,例如树。缺点是您不能单独释放条目,而只能一次性释放整个存储区。
示例
use simple_arena::Arena;
fn main() {
let mut arena = Arena::new();
let node1 = arena.alloc(1);
let node2 = arena.alloc(2);
assert_eq!(*node1, 1);
assert_eq!(*node2, 2);
}
存储区还可以用于使用Cell
分配包含对存储区中其他结构体引用的结构体。
use simple_arena::Arena;
use std::cell::Cell;
struct Node<'a> {
next: Cell<Option<&'a Node<'a>>>,
value: u32,
}
fn main() {
let mut arena = Arena::new();
let node1 = arena.alloc(Node { next: Cell::new(None), value: 1 });
let node2 = arena.alloc(Node { next: Cell::new(Some(node1)), value: 2 });
node1.next.set(Some(node2));
assert_eq!(node1.next.get().unwrap().value, 2);
}
替代方案
您需要更多功能,如迭代器吗? typed-arena
您需要分配多个类型吗? bumpalo