2个版本
0.3.1 | 2024年5月9日 |
---|---|
0.3.0 | 2024年5月9日 |
0.2.0 |
|
0.1.2 |
|
#227 in 内存管理
10KB
159 行
slabby
不适用于生产环境。请勿在生产环境中使用。
此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);
}