内存管理-内存池设计-双向链表实现内存碎片重组

一.设计原理

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);


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值