acl 内存池设计与实现(acl_lib)

本文探讨了设计内存池的原因,包括避免内存碎片、内存泄漏和减少系统开销。介绍了acl内存池的设计思路和使用方法,强调了其在处理小内存、短生命周期需求时的高效性。内容涵盖内存池的创建、内存申请与释放过程,以及acl内存池的链式存储结构。此外,文章还分享了一个编程小技巧,如何利用char buf[1]作为标志位。
摘要由CSDN通过智能技术生成

一、设计内存池原因:

c/c++ 内存管理是件让人头疼的事情: 分配足够的内存,追踪内存的分配,在不需要的时候释放内存,这些过程相当复杂,而且直接使用系统调用malloc/ free, new/delete 进行内存分配和释放,有如下问题:

  • 内存碎片化: 频繁申请/释放内存,会造成内存碎片化,在分配大内存的时候,系统需要压缩内存空间,造成极大的系统开销;
  • 内存泄漏: 频繁申请/释放内存会很可能导致内存泄漏,造成
  • 开销大: 内存分配有一把全局锁,频繁调用会增大系统开销;

内存池的设计思想就是,先提前申请一定数量的内存块,当有内存需要的时候,先从这些内存中分配内存资源,如果内存块不够,则继续申请内存。这样的一个优点是:内存分配效率得到提升,尤其加快了小内存申请/释放

acl 内存池的设计就是为了解决小内存频繁申请释放,且这些内存块生命周期短(如一个http请求)

  • 1 在申请内存时,通过先申请一块大内存,之后从这块大内存中不断给用户分配小内存。当一块内存页上的所有内存分配完,在申请一块大内存。
  • 2 用户归还内存时,将使用该块内存页的用户减去1,当使用该内存页用户不存在的时候,我们就把这块大内存释放掉。

二、使用acl内存池

     #incude “lib_acl.h”
     int main(void) {
   
         // 申请了一个8192长度的内存池
         ACL_DBUF_POOL *dbuf = acl_dbuf_pool_create(8192);
	     char *huge_ptr; //大内存首地址
	     int   i
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值