BOOST内存管理(一) --- boost::object_pool
2016-03-17 11:06
465 查看
boost pool是个不错的库,可以省点内存管理功夫,内存池分配内存,还可以速度上比malloc更快一些。
boost::object_pool主要针对,对象的内存分配,他可以像使用new 一样来创建对象,对象的内存放在object_pool里面。
实际上object_pool使用pool类,代码上是object_pool继承pool类,object_pool比pool多些什么呢,多的就是new 比malloc多的那些内容.
object_pool::construct完成类的内存分配和建构,object_pool::destroy完成类的析构和内存释放。
看看实际例子:
总结:
1.无论哪种方式的申请内存,占用空间都比有用空间大点,实际有用空间:8字节 * 20*1024*204 = 160兆
2.new和malloc无论在debug还是release下,占用内存资源和CPU资源都差不多
3.使用boost中的object_pool无论从内存消耗还是从速率上来讲都比new和malloc好,尤其是使用release的时候分配资源的速度
4.在操作大数据的时候,最好使用boost中的boost_pool
boost::object_pool主要针对,对象的内存分配,他可以像使用new 一样来创建对象,对象的内存放在object_pool里面。
实际上object_pool使用pool类,代码上是object_pool继承pool类,object_pool比pool多些什么呢,多的就是new 比malloc多的那些内容.
object_pool::construct完成类的内存分配和建构,object_pool::destroy完成类的析构和内存释放。
看看实际例子:
#include "stdafx.h" #include <malloc.h> #include <boost/pool/object_pool.hpp> #include <boost/serialization/singleton.hpp> #include <boost/thread/mutex.hpp> #include <boost/timer.hpp> class ObjectMgr; typedef boost::unique_lock<boost::mutex> WriteLock; typedef boost::serialization::singleton<ObjectMgr> ObjectMgrFactory; struct myObject { int a; char b; myObject () { a=0; b=0; } }; class ObjectMgr { public: myObject* CreateNewObject(myObject o) { WriteLock wl(mt); return pool.construct(o); } void free(myObject *po) { WriteLock wl(mt); if (pool.is_from(po)) { pool.destroy(po); } } private: boost::object_pool<myObject> pool; boost::mutex mt; }; int _tmain(int argc, _TCHAR* argv[]) { boost::timer t; for (int i=0;i<20*1024*1024;i++) { myObject to; to.a = 2*i; to.b = i; //方式一: objectpool debug:14.553秒 260兆 release:0.674秒 260兆 //ObjectMgrFactory::get_mutable_instance().CreateNewObject(to); //方式二: new debug:14.91秒 1420兆 release:11.815秒 610兆 //myObject *pmyObject = new myObject(to); //方式三: malloc debug:14.926秒 1400兆 release:11.737秒 630兆 //myObject *pmyObject = (myObject *)malloc(sizeof(myObject)); //方式四: pool debug:59.235秒 0兆 release:22.116秒 630兆 boost::pool<> pObj(sizeof(myObject)); myObject *pmyObject = (myObject *)pObj.malloc(); } std::cout << "use time "<<t.elapsed()<<std::endl; return 0; }
总结:
1.无论哪种方式的申请内存,占用空间都比有用空间大点,实际有用空间:8字节 * 20*1024*204 = 160兆
2.new和malloc无论在debug还是release下,占用内存资源和CPU资源都差不多
3.使用boost中的object_pool无论从内存消耗还是从速率上来讲都比new和malloc好,尤其是使用release的时候分配资源的速度
4.在操作大数据的时候,最好使用boost中的boost_pool
相关文章推荐
- 关于Object.clone克隆方法的测试
- object-c 的runtime.h
- Objective-C 中的 instancetype 和 id 关键字
- Selective Search for Object Recognition
- 在Tamarin中 3D Touch 的使用
- Object-C基础-02-第一个OC的类
- Object-C基础-03-点语法
- Object-C基础-04-自定义构造方法和description方法
- Object-C基础-05-self关键字
- Object-C基础-06-空指针和野指针
- Objective-C中的instancetype和id区别
- 查找共享库路径是失败,“cannot open shared object file: No such file or directory”解决方法
- 两个Hacker,专门Patch TObject
- 动态实现Objective-C中属性(Property)的方法
- ImageContainer重复添加,以及Map<String,Object>遍历
- Object类的方法
- Qt Meta Object system 学习
- Objective-C @encode关键字
- Online Object Tracking: A Benchmark 翻译
- salesforce 零基础开发入门学习(三)sObject简单介绍以及简单DML操作(SOQL)