boost::fast_pool_allocator
Boost库的pool提供了一个内存池分配器,用于管理在一个独立的、大的分配空间里的动态内存分配。Boost库的pool主要适用于快速分配同样大小的内存块,尤其是反复分配和释放同样大小的内存块的情况。使用pool内存池主要有以下两个优点:
1. 能够有效地管理许多小型对象的分配和释放工作,避免了自己去管理内存而产生的内存碎片和效率低下问题。 2. 告别程序内存泄漏的烦恼,pool库会在内部对内存自动进行管理,避免了程序员一不小心而造成的内存泄漏问题。
pool库主要提供了四种内存池接口,分别是pool、object_pool、singleton_pool和pool_allocator(fast_pool_allocator)。
pool接口:头文件为<boost/pool/pool.hpp>,主要用于快速分配小块内存,使用时需要指定每次要分配的内存块的大小。其malloc函数用于从内存池中分配内存;free函数用于释放内存,并交还给内存池,而不是系统;release_memory函数用于释放所有未被分配的内存;purge_memory函数用于释放所有内存。当然,也可以不调用free或release_memory等函数,pool接口对象在析构时会调用purge_memory自动释放所有内存。
示例代码如下:
1 pool<> myPool(sizeof(int));
2 for (int i = 0; i < 10; i++)
3 {
4 int *pnNum = (int *)myPool.malloc();
5 *pnNum = i+1;
6 cout << *pnNum << endl;
7 }
object_pool接口:头文件为<boost/pool/object_pool.hpp>,顾名思义,主要用于对象的内存分配并自动调用类的构造函数。其construct函数用于从内存池中分配内存并自动调用构造函数,其destroy函数用于释放内存交还给内存池并自动调用析构函数。与pool接口一样,也可以不调用destroy函数,object_pool接口对象在析构时会自动释放所有内存并自动调用析构函数。另外,object_pool接口也有malloc和free函数,但其malloc只分配内存而不负责构造,free只释放内存而不负责析构。因此,最好将construct和destroy配对使用,将malloc和free配对使用,而不要两者混用。 示例代码如下:
1 object_pool<CTest> myObjectPool;
2 for (int j = 0; j < 10; j++)
3 {
4 CTest *pTest = (CTest *)myObjectPool.construct(j*j);
5 if (j == 5)
6 {
7 myObjectPool.destroy(pTest);
8 }
9 }
singleton_pool接口:头文件为<boost/pool/singleton_pool.hpp>,singleton_pool接口的构造函数是私有的,因此不能够创建一个singleton_pool接口的对象。singleton_pool接口提供了一些静态方法如malloc、free用于内存的分配和释放,其他方面与pool接口相同。
示例代码如下:
1 struct intpool { };
2 struct intpool2 { };
3 typedef singleton_pool<intpool, sizeof(int)> ipool1;
4 typedef singleton_pool<intpool2, sizeof(int)> ipool2;
5 for (int i = 0; i < 10; ++i)
6 {
7 int *q1 = (int *)ipool1::malloc();
8 int *q2 = (int *)ipool2::malloc();
9 *q1 = i;
10 *q2 = i*i;
11 cout << *q1 << " and " << *q2 << endl;
12 }
13 ipool1::purge_memory();
14 ipool2::purge_memory();
pool_allocator接口:头文件为<boost/pool/pool_allocator.hpp>,主要与STL的容器一起使用,可用于代替STL中的allocator。
示例代码如下:
1 vector<int, pool_allocator<int> > vctTemp;
2 list<char, fast_pool_allocator<char> > lstTemp;
其中,pool_allocator的内部实现调用了ordered_malloc和ordered_free,可以满足对大量的连续内存块的分配请求。fast_pool_allocator 的内部实现调用了malloc和free,比较适合于一次请求单个大内存块的情况,但也适用于通用分配,不过具有一些性能上的缺点。
boost::fast_pool_allocator相关推荐
- C++ boost 实例学习
boost生成和解析json的完整例子 http://blog.csdn.net/dotphoenix/article/details/27081377 // // json_parser.h // ...
- 服务器设计系列:内存管理
服务器性能的关键在于内存.从收包到解析,到消息内存的申请,到session结构内存的申请都要小心处理,尽量减少内存数据copy,减少内存动态申请,减少内存检索.为达到这个目的,不同的地方有不同的方法, ...
- linux boost内存池,C++ boost库教程之内存池
Boost Pool 库提供了一个内存池分配器,它是一个工具,用于管理在一个独立的.大的分配空间里的动 态内存.当你需要分配和回收许多不的对象或需要更高效的内存控制时,使用内存池是一个好的 解决方案 ...
- BOOST内存管理(二) --- boost::pool
Boost库的pool提供了一个内存池分配器,用于管理在一个独立的.大的分配空间里的动态内存分配.Boost库的pool主要适用于快速分配同样大小的内存块,尤其是反复分配和释放同样大小的内存块的情况. ...
- boost::pool
Boost库的pool提供了一个内存池分配器,用于管理在一个独立的.大的分配空间里的动态内存分配.Boost库的pool主要适用于快速分配同样大小的内存块,尤其是反复分配和释放同样大小的内存块的情况. ...
- 读《Boost程序库完全开发指南》
读<Boost程序库完全开发指南> 2011-05-18 20:47:19| 分类: 读书|举报|字号 订阅 C++确实很复杂,神一样的0x不知道能否使C++变得纯粹和干爽? boost ...
- Linux下安装 boost 库
1. 先去官网下载压缩包: https://www.boost.org/ 2. 解压后cd 进入根目录,然后执行: ./bootstrap.sh 3. 安装(时间会很长): ./b2 install ...
- Mysql依赖库Boost的源码安装,linux下boost库的安装
boost'准标准库'安装过程. 安装的是boost_1_60_0. (1)首先去下载最新的boost代码包,网址www.boost.org. (2)进入到自己的目录,解压: bzip2 -d boo ...
- 函数指针amp;绑定: boost::functoin/std::function/bind
see link: https://isocpp.org/wiki/faq/pointers-to-members function vs template: http://stackoverflow ...
最新文章
- AI一分钟 | 北京发放自动驾驶首批牌照,百度获准测试;亿航美国分公司申请破产,债务高达数百万美元
- 微生物组-宏基因组分析第9期(报名直播课免费参加线下2020.10本年最后一期)
- 将.NET概念映射到Lightning平台
- Activity 中的Toast在Activity销毁后报错,解决方法,把context改成应用的
- SCMagazine: SIEM走出阴影,迈向光明
- 我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
- camel研究_【卡瑞利珠单抗·CameL研究者说】任秀宝教授:卡瑞利珠单抗治疗NSCLC疗效与安全性俱佳,受指南重磅推荐后再获批肺癌适应症...
- Android-failed to set system property
- 老师一天表情大全,也太搞笑了!
- arcgis人口空间化_基于遥感和GIS的人口数据空间化研究进展及案例分析
- 手机二维码软件及资源大汇总
- 五一放一天不调休,你能接受吗?
- WEEK 15 C ZJM 与纸条
- 培训机构让Github的含金量降低了?
- Python爬虫网站图片并下载到本地
- 机器学习应用设计阶段的 10 个陷阱和 11 个最佳实践
- 阿汤哥的四条领导力经验
- MySql下关于时间范围的between查询
- NC开发笔记——NC63开发方法总结
- Oracle与plsqldev,oracle与PLSQLDev的链接問題
热门文章
- Python学习入门基础教程(learning Python)--3.3.4 Python的if-elif-else语句
- Rails安全导读【完】
- 数据结构的简单理解(4)
- 2021牛客多校10 - Train Wreck(贪心)
- CodeForces - 1208F Bits And Pieces(SOSdp+贪心)
- CodeForces - 787D - Legacy(线段树优化建图+最短路)
- CodeForces - 1321B Journey Planning(思维)
- qduoj - WHY吃糖果(二分套二分)
- python基础语法-异常处理
- 远程登录另一个mysql 数据库_Ubuntu中开启MySQL远程访问功能,并将另一个数据库服务器中的数据迁移到新的服务器中...