2个不稳定版本

0.2.0 2023年1月23日
0.1.0 2022年11月8日

#601 in 内存管理

Download history • Rust 包仓库 446/week @ 2024-04-02 • Rust 包仓库 299/week @ 2024-04-09 • Rust 包仓库 365/week @ 2024-04-16 • Rust 包仓库 399/week @ 2024-04-23 • Rust 包仓库 409/week @ 2024-04-30 • Rust 包仓库 395/week @ 2024-05-07 • Rust 包仓库 366/week @ 2024-05-14 • Rust 包仓库 331/week @ 2024-05-21 • Rust 包仓库 401/week @ 2024-05-28 • Rust 包仓库 287/week @ 2024-06-04 • Rust 包仓库 252/week @ 2024-06-11 • Rust 包仓库 299/week @ 2024-06-18 • Rust 包仓库 321/week @ 2024-06-25 • Rust 包仓库 49/week @ 2024-07-02 • Rust 包仓库 288/week @ 2024-07-09 • Rust 包仓库 303/week @ 2024-07-16 • Rust 包仓库

每月 1,008 次下载

MIT 许可证

6KB
67

BumpSlab:具有可重用插槽的bump分配器

crates.io

Bumpslab是一个提供集合内部项目稳定引用的slab。

通常,当一个vec增长时,它的项目将会移动。Bumpslab是一个提供指针而不是键的场分配器。这允许你在不需要使用值的场的情况下跟踪指针的内容。这意味着指针在Slot<>的生命周期内保证稳定。

示例

struct MyThing(usize);

let slab = BumpSlab::new();

let a = slab.push(MyThing(0));
let b = slab.push(MyThing(1));
let c = slab.push(MyThing(2));

let last = slab.push(MyThing(3));

let ptr = last.ptr();
slab.remove(last);

let new_last = slab.push(Mything(4));
let new_ptr = new_last.ptr();

// Slots get reused, known by pointer
assert_eq!(ptr, new_ptr);

何时使用BumpSlab

  • 你需要稳定的引用(例如,在没有Arc的情况下驱动futures)
  • 你只有一种类型
  • 迭代对你来说不如查找重要

作为Arc的替代方案使用

此crate的主要动机是允许在不要求为自定义waker代码使用Arc的情况下生成futures批处理。唤醒者需要一个稳定的引用,通常由Arc保证。然而,如果你生成许多futures,这可能会带来一些分配开销。BumpSlab为你提供了唤醒者生命周期的稳定引用,并在它们被释放时重用插槽,与Arc相比保持了更高的缓存局部性。

依赖关系

~240KB