内存块分配器
内存块分配器允许从指定的内存区域动态地分配内存块,其中:
所有的内存块都有一个固定的大小。
可以同时分配或释放多个块。
一起分配的一组块可能不是连续的。这对于scatter-gather
DMA传输等操作非常有用。
分配块定义在关联的缓冲区之外完成(不像内存板)。这允许缓冲区驻留在内存区域,这些区域可以断电以节省能量。
概念
可以定义任意数量的内存块分配器(仅受可用RAM的限制)。每个分配器都由其内存地址引用。
内存块分配器具有以下关键属性:
每个块的块大小,以字节为单位测量。它必须至少有4N个字节长,其中N大于0。
可供分配的块数。它必须大于零。
为内存板的块提供内存的缓冲区。它必须至少是“块大小”乘以“块数”的字节长。
一个块位图,用来跟踪已分配的块。
缓冲区必须对准一个N字节边界,其中N是大于2的2的幂(即4、8、16、…)。为了确保缓冲区中的所有内存块都与此边界对齐,块大小也必须是N的倍数。
由于使用了内部定义结构及其创建,因此必须在编译时声明和定义每个内存块分配器。
内部操作
与分配器相关联的每个缓冲区都是一个固定大小的块数组,块之