概述
静态内存为开辟若干个Buf,在每个buf增加控制头,该控制头即为链表的节点。如下图所示。
实现
底层数据结构为
struct hstack_mem_pool {
u32 used;
u8 buf[HSTACK_MEMORY_POOL_BUFFER_SIZE];
} mem_pool[HSTACK_MEMORY_POOL_ITEMS];
此处开辟了HSTACK_MEMORY_POOL_ITEMS个静态内存,每一块静态内存均是由buf和used组成。此处的buf包含了用户使用的buf和控制头(链表)两个部分。
底层Malloc实现:
void *HstackList_MallocIMP(u8 length)
{
u8 i;
if (length > HSTACK_MEMORY_POOL_BUFFER_SIZE) {
assert(0);
}
for (i = 0; i < HSTACK_MEMORY_POOL_ITEMS; i++) {
if (cb.mem_pool[i].used == 0) {
cb.mem_pool[i].used = 1;
return ((void *)(cb.mem_pool[i].buf));
}
}
return NULL;
}
此函数返回了静态buf的首地址,在list层调用该函数,即可申请内存。list层内存申请如