内存池

   由于glibc库自带的malloc/free最终是需要访问操作系统的,
   严重时会使机器运行缓慢。同时由于系统采用伙伴算法,
   会不可不免的有内存碎片产生。
   而内存池能在一定程度上改善上述问题,
   下面从原理、实现、使用的角度浅谈一下。

原理

  • 使用malloc一次从系统申请一块大内存,如1024MB
uinit_8 buffer = malloc(1024*1024*1024);//分配1G内存
  • 使用伙伴算法管理该内存,典型做法额外malloc分配一个管理数组
  • 锚定伙伴算法管理的最小内存单元,如4k.
    即使用户申请1个字节内存,该池最小也分配4k内存。
    这样粒度较粗有利于提高管理的效率
  • 用户使用,类似如下代码
uint8 buffer = getBuffer(size_t size);  //申请内存
int len = putBuffer(char* buf, int len);//往内存里面写入len字节数据
release(char *buf);                     //释放内存

设计

  • 实现伙伴算法对内存的管理,开放申请、释放、
    往内存中填充数据等接口,尽可能的封装在一个
    库或者一个公共接口中

  • 另外按需实现一些调试接口,如剩余内存,总内存,内存地址,
    实际申请的内存和实际分配的内存等

  • 增加引用计数

使用

  • 用户只需调用getBuffer/putBuffer/release等操作
    即可替代原来的系统函数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值