1 unstable release
| 0.1.0 | Jun 11, 2025 |
|---|
#30 in #slab
21KB
363 lines
自动扩展内存板实现
本库提供了两种自动扩展的内存板实现,针对不同环境优化:
结构体
VBSlab (基于桶的内存板)
- 设计目标:多线程环境使用
- 核心机制:主内存板(可扩展Vec) + 辅助内存板(固定大小桶)
- 扩展方式:主内存板满时,线程安全地在辅助桶分配
- 内存整理:支持通过
settle()合并所有数据到主内存板 - 线程安全:需外部保证不会同时访问同一元素
VecSlab (基于Vec的内存板)
- 设计目标:WASM环境专用
- 核心机制:单个自动扩展的Vec
- 特点:实现简单,无桶结构
- 线程安全:非线程安全实现
主要方法
通用方法
-
with_capacity(raw_size: usize, capacity: usize) -> Self
创建指定元素大小和初始容量的内存板 -
capacity(len: usize) -> usize
计算给定元素数量所需的总容量 -
vec_capacity() -> usize
获取主内存板的容量(元素数量) -
get<T>(index: usize) -> Option<&mut T>
安全获取元素引用(边界检查) -
get_unchecked<T>(index: usize) -> &mut T
无检查获取元素引用(需确保索引有效) -
load_alloc<T>(index: usize) -> &mut T
获取元素引用(必要时自动分配) -
settle(len: usize)
内存整理(实现机制不同)
使用选择
- 多线程环境:使用
VBSlab - WASM环境:使用
VecSlab - 类型别名:
- 启用 "rc" 特性时:
RawSlab=VecSlab - 未启用时:
RawSlab=VBSlab
- 启用 "rc" 特性时:
注意事项
- 创建时必须指定元素大小(
raw_size) - 零大小元素会特殊处理
- 多线程访问需外部同步机制
- 定期调用
settle()可优化内存布局
Dependencies
~225KB