您的位置:首页 > 移动开发 > Objective-C

boost准模板库内存管理中pool和object_pool的使用

2014-04-25 00:09 369 查看
首先,在写程序之前,必须修改一个问题,要不然,无法链接:

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();
}


程序的记过很简单,就不在此处列出来了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: