一.设计原理
1.频繁申请释放小块内存,操作系统中存在大量的内存碎片。
通过双向链表实现对内存块的管理,释放时与相邻内存块合并。
2.数据结构
typedef struct st_node
{
st_node* pre;
st_node* next;
}st_node;//指针
typedef struct st_block
{
st_node* node;
char* mem_addr;
int mem_len;
}st_block;//内存碎片
typedef struct st_mem_pool
{
st_node* list_free_mem;//空闲内存区
st_node* list_busy_mem;
}st_mem_pool;//内存池
3.算法
a.创建内存池,初始化空闲内存区。
st_mem_pool* CreatMemPool(int mem_size_max);
b.申请内存,空闲内存区删除元素,使用内存区增加元素。
char* GetMem(int mem_size);
c.释放内存,使用内存区删除元素,空闲内存区增加元素(判断是否能与元素集合中的内存碎片合并)。
void FreeMem(char* mem_addr);