内存池详解

内存池是一种优化内存分配的技术,通过预先分配一大块内存并进行管理,提高小块内存分配的效率。本文介绍了内存池与STL中allocator的关系,并展示了如何实现内存池,包括内存池数组、节点类型以及allocate和deallocate操作。测试结果显示,自定义内存池在某些场景下比标准库的allocator更快。
摘要由CSDN通过智能技术生成


最近一直在搞内存池,这一块之前一直没有注意过,最近看书看到这一块,发现挺重要的,琢磨了挺长时间,也在github上找了很多代码,感觉都不太好,最后是看《深入实践C++模板编程》书中的实现,感觉还不错,就自己敲了一下并分析理解了原理,感觉受益匪浅。

源码

简介

什么是内存池?为什么要使用内存池?

简单的来说就是,如果我们要给很多元素分配内存,如果我们一个个用malloc分配,因为malloc本身调用非常慢,所以数据量大时耗费在malloc上的时间将会很多。内存池就是先分配一块比较大的内存,再对这块已经分配的内存进行管理,对元素进行分配,这样可以节约比较多的时间。

内存池和allocator的关系

allocator是分配器,STL中大量使用它,比如vector等,我们平时使用的vector<int>实际上是隐含了分配器,实际真正的调用应该是vector<int, std::allocator<int>>,也就是说真正的内存管理是通过allocator来进行的。实际上std::allocator的实现就是通过内存池,而且性能还不错。

下面的表格是一个分配器所需实现的内存处理成员函数:

成员函数 简介
allocate 分配未初始化的存储
deallocate 解分配存储
construct 在分配的存储构造对象
destroy 析构在已分配存储中的对象

这里要注意deallocate和destroy的差别,deallocate的作用是将不用的块重新放回空闲列表,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值