2个版本
0.1.1 | 2023年7月12日 |
---|---|
0.1.0 | 2023年7月4日 |
#308 in 内存管理
在 btree-plus-store 中使用
1.5MB
2K SLoC
rustc-arena-modified: 将rustc-arena迁移到稳定版Rust并增加了新特性
从 rustc_arena 分支出来
你为什么想要这个?
- 在竞技场中分配对象可能比常规分配更快
- 竞技场同时也是一个集合,您可以在共享引用的后面插入对象。与其复制对象并可能使用
Rc
,不如使用Arena
并复制引用。
关于 typed-arena
和 bumpalo
呢?
rustc_arena_modified::TypedArena
允许合并和清除可变引用后面的对象,同时保存块以便不需要重新分配。这相当于调用into_vec
然后将向量转换回竞技场,但更快,因为您不需要分配任何内容。rustc_arena_modified::TypedArena
根据基准测试在迭代方面也显著更快(其他差异可以忽略不计;见基准测试)rustc_arena_modified::TypedArena
返回分配值的共享引用,因此它可以迭代共享引用后面的值,就像typed-arena-nomut
一样。与typed-arena-nomut
不同,它还可以在rustc_arena_modified::TypedArenaMut
之间进行空操作转换,这是相同的,但返回可变引用。此外,您还可以在共享竞技场的可变引用中获得迭代可变元素引用,因为这确保没有活动的共享引用。- 《slab》功能提供了《SlabArena》,它是《rustc_arena_modified::TypedArena》的封装,使其能够跟踪链表中的释放元素,以便回收它们的内存。这带来了一些缺点,比如无法在空闲列表中分配切片(??:允许切片分配,只是让它不成为空闲列表的一部分?)
- 待办事项:比较《DroplessArena》和《Bump》(注意:也许《Bump》在客观上更好)
它是什么?
将rustc_arena
移植到稳定版Rust,并具有以下新功能:
TypedArena::iter
以遍历竞技场中的所有对象TypedArena::retain
和TypedArena::clear
,以合并清除可变引用后面的对象,同时保留块,以便它们不需要重新分配。
安全性
该库大量使用unsafe
,并且没有使用MIRI进行完全测试。大多数操作和边缘情况都有测试,基本功能几乎直接从经过充分测试的《rustc_arena》复制而来。但额外功能测试较少,尤其是在大量使用unsafe
的情况下,它不应该在生产中使用。
基准测试
总体而言,性能与《rustc_arena》和《typed_arena》大致相同,但迭代速度比《typed_arena》快得多。《slab_arena》的表现明显较慢。
许可
根据您的选择,在以下两种许可下提供许可:
- Apache License,版本2.0(《LICENSE-APACHE》或《https://apache.ac.cn/licenses/LICENSE-2.0》)
- MIT许可(《LICENSE-MIT》或《http://opensource.org/licenses/MIT》)
。
从rustc-arena(《Github》)分支,它也根据MIT“或”Apache 2.0许可。
贡献
除非您明确表示,否则根据Apache-2.0许可定义,您提交的任何有意包含在工作中的贡献,都将按照上述方式双重许可,不附加任何额外条款或条件。