BOOST内存管理(一) --- boost::object_pool
生活随笔
收集整理的這篇文章主要介紹了
BOOST内存管理(一) --- boost::object_pool
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
boost pool是個不錯的庫,可以省點內(nèi)存管理功夫,內(nèi)存池分配內(nèi)存,還可以速度上比malloc更快一些。
boost::object_pool主要針對,對象的內(nèi)存分配,他可以像使用new 一樣來創(chuàng)建對象,對象的內(nèi)存放在object_pool里面。
實際上object_pool使用pool類,代碼上是object_pool繼承pool類,object_pool比pool多些什么呢,多的就是new 比malloc多的那些內(nèi)容.
object_pool::construct完成類的內(nèi)存分配和建構(gòu),object_pool::destroy完成類的析構(gòu)和內(nèi)存釋放。
總結(jié):
看看實際例子:
#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; }總結(jié):
1.無論哪種方式的申請內(nèi)存,占用空間都比有用空間大點,實際有用空間:8字節(jié) * 20*1024*204 = 160兆
2.new和malloc無論在debug還是release下,占用內(nèi)存資源和CPU資源都差不多
3.使用boost中的object_pool無論從內(nèi)存消耗還是從速率上來講都比new和malloc好,尤其是使用release的時候分配資源的速度
4.在操作大數(shù)據(jù)的時候,最好使用boost中的boost_pool
總結(jié)
以上是生活随笔為你收集整理的BOOST内存管理(一) --- boost::object_pool的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: (十二)boost库之多线程高级特性
- 下一篇: BOOST内存管理(二) --- boo