一种快速的动态内存分配算法

算法步骤:
1.对每个内存缓冲池进行划分,分为位图和内存块。例如一个2K的内存池,按照16字节一个block单位来划分,首先拿出16字节(=2*1024/16/8)当做位图来标记每个block是否被占用,每一个block对应位图中一个Bit,内容如图1所示。当一个block的标记为1,表示可用,为0,表示被占用。
位图(16字节,用128bit表示)
一种快速的动态内存分配算法
图1

2.内存分配,针对需要多个块的情况,例如分配一个36字节的内存,需3个block。分配的时候只要查找哪些位图bit值为0的Block。需要解决的问题是,块与块之间如何关联,组成一块完整的内存块。每个块的16个字节里需要1个字节来表示是否有后续块。
一个Block16字节
一种快速的动态内存分配算法
1字节 15字节
1字节:0xFF表示没有后续块,其他有后续块。
15字节:用来存储实际的数据。

36个字节分配好后,整个内存由图1变为图2。分配好后返回给用户的是第一个块的索引,这里是块0。
位图(16字节,用128bit表示)
一种快速的动态内存分配算法
图2

3.内存释放,只要把多个内存块对应的位图bit值置为0,不需要考虑内存碎片整理。

算法特点:
1.快速分配;
2.无需内存碎片整理。
3.Block的大小可以根据业务需求修改。
算法缺点:
浪费少量内存。