#slab #allocator #no-std

no-std slabby

单个类型大量实例的最大化高效分配和释放

2个版本

0.3.1 2024年5月9日
0.3.0 2024年5月9日
0.2.0 2024年5月9日
0.1.2 2024年5月7日

#227 in 内存管理

MIT许可证

10KB
159

slabby

不适用于生产环境。请勿在生产环境中使用。

crates.io docs.rs

此crate提供单个类型大量实例的最大化高效分配和释放。

您可以为每个Slab的实例选择键的大小,这允许您使用小于指针的类型来存储项目索引,这可以提高内存局部性,但会限制可以存储的元素数量。

由于此Slab的设计针对内存使用和常见情况(添加、删除和检索元素)的效率进行了优化,因此它自由地使用unsafe代码,无法提供安全的用户API,并且某些操作的成本比预期更高。所有此类操作都有文档说明。

用法

let mut slab = slabby::Slab32::new();
unsafe {
    let key1 = slab.insert(1);
    let key2 = slab.insert(2);
    let key3 = slab.insert(3);

    assert_eq!(slab.get(key1), &1);
    assert_eq!(slab.get(key2), &2);
    assert_eq!(slab.get(key3), &3);

    assert_eq!(slab.remove(key2), 2);
    assert_eq!(slab.remove(key1), 1);

    assert_eq!(slab.get(key3), &3);

    slab.insert(4);
    let key5 = slab.insert(5);
    slab.insert(6);

    assert_eq!(slab.len(), 4);

    *slab.get_mut(key5) += 1;
    assert_eq!(slab.remove(key5), 6);

    assert_eq!(slab.len(), 3);
}

无运行时依赖