1个不稳定版本

0.2.0 2023年11月28日

#534 in 内存管理

MIT许可证

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

无运行时依赖