9个版本
| 0.2.2 | 2021年12月21日 |
|---|---|
| 0.2.1 | 2021年12月21日 |
| 0.1.5 | 2021年12月19日 |
#1756 in 嵌入式开发
每月 39 次下载
在 2 软件包中使用
44KB
688 行
Byte Slab
Byte Slab是一个软件包,它提供了一个字节数组池或块,可以以固定大小的块进行分配。它类似于heapless::Pool,但它还允许将分配(SlabBoxes)转换为共享的、引用计数的对象(SlabArc)。
目前,它将其空闲列表维护为MPMC队列,但这是一个可能改变的实现细节。这种实现方便,但不是特别内存密集。
该块是静态分配的,每个Box的大小以及可用的Box总数是通过编译时const值选择的。
Byte Slab旨在为使用DMA缓冲区而设计的裸金属嵌入式系统提供合适的Box,这些系统没有通用分配器。所有分配都是可能失败的。
主要组件
byte-slab软件包由以下主要元素组成
BSlab- 一个字节数组。这个结构体表示所有Box及其相关元数据的存储。SlabBox- 从BSlab拥有的分配,可以被所有者读取或写入(独占)。一个SlabBox可以被转换为SlabArc。当Box被丢弃时,底层内存会自动释放以供重用。SlabArc- 从BSlab获得的引用计数的分配,通过消耗一个SlabBox获得。由于底层分配可能是共享的,因此SlabArc不允许修改内容。SlabArc可以被克隆(这会增加引用计数),允许对同一数据进行多次(不可变)访问。当引用计数达到零时,底层内存会自动释放以供重用。SlabSliceArc- 一个SlabArc的引用计数视图。这用于提供对SlabArc一部分的视图,而不共享整个分配。它与底层SlabArc共享相同的引用计数,这意味着如果只有SlabSliceArc剩余,则不会释放底层SlabArc。当引用计数达到零时,底层内存会自动释放以供重用。ManagedArcSlab- 一个方便的类型,可能包含以下任一内容:一个借用&[u8]切片,或者一个SlabSliceArc。
依赖关系
~1.2–1.9MB
~40K SLoC