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,但它还允许将分配(SlabBox
es)转换为共享的、引用计数的对象(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