8个版本
0.3.3 | 2023年9月18日 |
---|---|
0.3.2 | 2022年12月20日 |
0.3.0 |
|
0.2.3 | 2022年11月11日 |
0.1.0 |
|
#105 in 内存管理
每月44次下载
65KB
1K SLoC
fixed-typed-arena
使用可配置的固定大小内存块分配单个类型值的竞技场(类似于typed-arena),这使得它能够在非摊销的O(1)(常数)时间内进行分配。
其他竞技场实现,如typed-arena,针对吞吐量进行了优化:它们以指数增长的大小分配内存块,从而实现摊销常数时间分配。
fixed-typed-arena针对延迟进行了优化:它以固定、可配置的大小分配内存块,单个值分配在非摊销常数时间内完成。
此crate仅依赖于core
和alloc
,因此可以在支持alloc
的no_std
环境中使用。
示例
use fixed_typed_arena::Arena;
struct Item(u64);
let arena = Arena::<_, 128>::new();
let item1 = arena.alloc(Item(1));
let item2 = arena.alloc(Item(2));
item1.0 += item2.0;
assert_eq!(item1.0, 3);
assert_eq!(item2.0, 2);
参考文献
由Arena
分配的项目可以包含与竞技场本身相同生命周期的引用,包括对其他项目的引用,但必须启用crate功能dropck_eyepatch
。这需要Rust nightly,因为fixed-typed-arena必须使用同名的非稳定语言功能。
或者,您可能可以使用ManuallyDropArena
。
ManuallyDropArena
此crate还提供了类似于ManuallyDropArena
的Arena
,但它返回任何生命周期的引用,包括'static
。这种类型的优点是可以不借用来使用,但代价是如果不调用不安全的drop
方法,将会泄露内存。
迭代
fixed-typed-arena的arenatype允许遍历所有已分配的项。对于Arena
提供了安全的可变迭代,如果Options::Mutable
为false,则所有arenatype提供安全的不可变迭代。无论选项如何,所有arenatype都提供不安全的可变和不可变迭代。