#generational-arena #generational #arena #arena-allocator #slab

不依赖std loro-thunderdome

thunderdome的分支:具有紧凑代际索引的快速代际分配器

1个不稳定版本

0.6.2 2023年10月28日

#279内存管理

Download history 12/week @ 2024-03-12 11/week @ 2024-03-19 23/week @ 2024-03-26 35/week @ 2024-04-02 50/week @ 2024-04-09 38/week @ 2024-04-16 30/week @ 2024-04-23 40/week @ 2024-04-30 19/week @ 2024-05-07 91/week @ 2024-05-14 42/week @ 2024-05-21 98/week @ 2024-05-28 55/week @ 2024-06-04 224/week @ 2024-06-11 92/week @ 2024-06-18 18/week @ 2024-06-25

395 每月下载量
用于 4 个crate(通过 generic-btree

MIT/Apache

58KB
1K SLoC

Thunderdome分支

此分支添加了一个reserve方法。

GitHub CI Status thunderdome on crates.io thunderdome docs

Thunderdome是一个由 generational-arenaslotmapslab 启发的 角斗场 代际分配器。它通过返回的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
  1. 代际索引有助于解决 ABA问题,该问题可能导致悬挂键错误地访问新插入的数据。

最低支持的Rust版本(MSRV)

Thunderdome 支持 Rust 1.47.0 及更高版本。在 Thunderdome 达到 1.0 版本之前,MSRV 的更改需要主要版本号的提升。在 1.0 版本之后,MSRV 的更改只需要次要版本号的提升,但需要充分的理由。

包功能

  • std(默认):使用标准库。禁用后,此包与 no-std 兼容。

许可证

许可协议为以下之一:

任选其一。

贡献

除非您明确声明,否则根据 Apache-2.0 许可证定义的,您有意提交的任何贡献,均应按照上述方式双许可,无需任何额外的条款或条件。

无运行时依赖

功能