1个不稳定版本
0.6.2 | 2023年10月28日 |
---|
#279 在 内存管理
395 每月下载量
用于 4 个crate(通过 generic-btree)
58KB
1K SLoC
Thunderdome分支
此分支添加了一个reserve
方法。
Thunderdome是一个由 generational-arena,slotmap 和 slab 启发的 角斗场 代际分配器。它通过返回的8字节小键(来自 Arena
)提供常数时间的插入、查找和删除。
Thunderdome的关键类型,Index
,在放入 Option<T>
时仍然是8字节,归功于Rust的 NonZero*
类型。
基本示例
let mut arena = Arena::new();
let foo = arena.insert("Foo");
let bar = arena.insert("Bar");
assert_eq!(arena[foo], "Foo");
assert_eq!(arena[bar], "Bar");
arena[bar] = "Replaced";
assert_eq!(arena[bar], "Replaced");
let foo_value = arena.remove(foo);
assert_eq!(foo_value, Some("Foo"));
// The slot previously used by foo will be reused for baz
let baz = arena.insert("Baz");
assert_eq!(arena[baz], "Baz");
// foo is no longer a valid key
assert_eq!(arena.get(foo), None);
与其他crate的对比
功能 | Thunderdome | generational-arena | slotmap | slab |
---|---|---|---|---|
代际索引¹ | 是 | 是 | 是 | 否 |
size_of::<索引>() |
8 | 16 | 8 | 8 |
size_of::<Option<索引>>() |
8 | 24 | 8 | 16 |
最大元素数 | 2³² | 2⁶⁴ | 2³² | 2⁶⁴ |
非Copy 值 |
是 | 是 | 是 | 是 |
no_std 支持 |
是 | 是 | 是 | 否 |
Serde支持 | 否 | 是 | 是 | 否 |
- 在rustc
1.44.0-x86_64-pc-windows-msvc
上计算的大小 - 有关每个库测试版本的详细信息,请参阅 Thunderdome对比Cargo.toml。
- 代际索引有助于解决 ABA问题,该问题可能导致悬挂键错误地访问新插入的数据。
最低支持的Rust版本(MSRV)
Thunderdome 支持 Rust 1.47.0 及更高版本。在 Thunderdome 达到 1.0 版本之前,MSRV 的更改需要主要版本号的提升。在 1.0 版本之后,MSRV 的更改只需要次要版本号的提升,但需要充分的理由。
包功能
std
(默认):使用标准库。禁用后,此包与no-std
兼容。
许可证
许可协议为以下之一:
- Apache 许可证 2.0 版本,(LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT 许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
任选其一。
贡献
除非您明确声明,否则根据 Apache-2.0 许可证定义的,您有意提交的任何贡献,均应按照上述方式双许可,无需任何额外的条款或条件。