9个版本

0.2.2 2021年12月21日
0.2.1 2021年12月21日
0.1.5 2021年12月19日

#1756 in 嵌入式开发

每月 39 次下载
2 软件包中使用

MIT/Apache

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