pi_raw_slab

Crates.iopi_raw_slab
lib.rspi_raw_slab
version0.1.0
created_at2025-06-11 11:05:34.324914+00
updated_at2025-06-11 11:05:34.324914+00
descriptionlock-free & auto-expansion raw slab
homepage
repositoryhttps://github.com/GaiaWorld/pi_arr.git
max_upload_size
id1708423
size18,728
(zmaxleo)

documentation

README

自动扩展内存板实现

本库提供了两种自动扩展的内存板实现,针对不同环境优化:

结构体

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

注意事项

  1. 创建时必须指定元素大小(raw_size)
  2. 零大小元素会特殊处理
  3. 多线程访问需外部同步机制
  4. 定期调用settle()可优化内存布局
Commit count: 63

cargo fmt