boost准模板库内存管理中pool和object_pool的使用
2017-04-21 12:56
399 查看
首先,在敲代码之前,必须改动一个问题。要不然,无法链接:
boost安装文件夹:D:\boost。
找到D:\boost\boost_1_55_0\include\boost-1_55\boost\system\error_code.hpp。
在error_code.hpp文件开头加入宏定义:#define BOOST_ERROR_CODE_HEADER_ONLY。
然后。以下就是我们的pool的演示样例:
#define BOOST_ALL_NO_LIB #include<boost/pool/object_pool.hpp> #include<iostream> //object_pool继承pool。可是是保护继承,有些操作相似,单有些pool的接口无法使用 using namespace std; using namespace boost; class demo_class { public: int a,b,c; demo_class(int x=1,int y=2,int z=3):a(x),b(y),c(z){}; }; int main() { object_pool<demo_class> p1;//创建对象内存池 demo_class *p=p1.malloc();//分配一个原始内存块 cout<<p1.is_from(p)<<endl; //p指向的内存未经初始化 cout<<(p->a!=1)<<" "<<(p->b!=2)<<" "<<(p->c!=3)<<endl; demo_class *pa=p1.construct(4,5,6);//构造一个对象。能够传递參数 cout<<(pa->a==4 && pa->b==5 && pa->c==6)<<endl; object_pool<string> pls;//定义一个分配string对象的内存池 for(int i=0;i<10;i++) { string *ps=pls.construct("Hello object_pool");//先调用分配内存。再 cout<<*ps<<endl;//连续分配大量的string对象 } p1.destroy(p);//手工析构和释放内存,然后使用传递的參数调用构造函数 getchar(); }
接着是object_pool的演示样例:
#define BOOST_ALL_NO_LIB #include<boost/pool/object_pool.hpp> #include<iostream> //object_pool继承pool。可是是保护继承,有些操作相似,单有些pool的接口无法使用 using namespace std; using namespace boost; class demo_class { public: int a,b,c; demo_class(int x=1,int y=2,int z=3):a(x),b(y),c(z){}; }; int main() { object_pool<demo_class> p1;//创建对象内存池 demo_class *p=p1.malloc();//分配一个原始内存块 cout<<p1.is_from(p)<<endl; //p指向的内存未经初始化 cout<<(p->a!=1)<<" "<<(p->b!=2)<<" "<<(p->c!=3)<<endl; demo_class *pa=p1.construct(4,5,6);//构造一个对象,能够传递參数 cout<<(pa->a==4 && pa->b==5 && pa->c==6)<<endl; object_pool<string> pls;//定义一个分配string对象的内存池 for(int i=0;i<10;i++) { string *ps=pls.construct("Hello object_pool");//先调用分配内存,再 cout<<*ps<<endl;//连续分配大量的string对象 } p1.destroy(p);//手工析构和释放内存,然后使用传递的參数调用构造函数 getchar(); }
程序的记过非常easy,就不在此处列出来了。
相关文章推荐
- boost准模板库内存管理中pool和object_pool的使用
- C++内存管理变革(4): boost::object_pool
- C++内存管理变革(4):boost::object_pool与gc allocator
- Unity3D内存管理——对象池(Object Pool)
- Unity内存管理——对象池(Object-Pool)
- Object-C中的内存管理 MRC、ARC以及Autoreleasepool的区别
- C++内存管理变革(4):boost::object_pool与gc allocator
- Unity3D内存管理——对象池(Object Pool)
- Unity3D内存管理——对象池(Object Pool)
- unity3D 内存管理——对象池(Object Pool)
- Object-C中的内存管理 MRC、ARC以及Autoreleasepool的区别
- C++内存管理变革(4):boost::object_pool与gc allocator
- 什么情况下应该使用对象池(ObjectPool)
- 什么情况下应该使用对象池(ObjectPool)?
- Unity3D内存管理——对象池(Object Pool)
- ThreadPool.RegisterWaitForSingleObject使用方法 推荐
- C++内存管理变革(4):boost::object_pool与gc allocator
- C++内存管理变革(4): boost::object_pool
- Boost库学习随记四 pool内存池使用示例:pool、object_pool、singleton_pool、pool_alloc内存池
- 使用apache commons pool时遇到IllegalStateException:returned object is not part of this pool