boost准模板库内存管理中pool和object_pool的使用
首先,在敲代码之前,必须改动一个问题。要不然,无法链接:
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的使用的更多相关文章
- boost准模板库scoped_ptr指针的使用以及auto_ptr智能指针的对照
首先我们看看scoped_ptr的基本使用,包括了swap(),get(),reset()的使用,重要的提醒是作用域结束的时候会自己主动析构,无需手动的释放资源: #include<boost/ ...
- boost pool 和 object_pool
内存池(Memory Pool)是一种内存分配方式. 通常我们习惯直接使用new.malloc等API申请分配内存,这样做的缺点在于:由于所申请内存块的大小不定,当频繁使用时会造成大量的 ...
- STL--标准模板库--简要概述
STL--标准模板库 #include <vector> //头文件 STL(Standared Template Library)即标准模板库,惠普实验室开发的一系列软件的统称. ...
- Buffer Pool--数据库内存结构
数据库从操作系统申请到的内存可分为两部分:1.缓存池内存(数据页和空闲页)2.非缓存池内存(线程/DLL/连接服务器等) Note:通过服务器实例属性设置的最大/最小服务器内存是指缓存池内存Note: ...
- POJ 1655.Balancing Act-树的重心(DFS) 模板(vector存图)
Balancing Act Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 17497 Accepted: 7398 De ...
- 22.boost图模板
//#pragma warning(disable : 4819) #include <boost/config.hpp> #include <iostream> // for ...
- 面试官:"准备用HashMap存1w条数据,构造时传10000还会触发扩容吗?"
// 预计存入 1w 条数据,初始化赋值 10000,避免 resize. HashMap<String,String> map = new HashMap<>(10000) ...
- C++之Boost准标准库配置
下载安装 进入官网下载地址:https://www.boost.org/users/download/ 本教程直接下载官方已编译库,不涉及源代码手动编译 点击官方编号好的链接,然后进入一个下载地址:h ...
- Linux的.a、.so和.o文件 windows下obj,lib,dll,exe的关系 动态库内存管理 动态链接库搜索顺序 符号解析和绑定 strlen函数的汇编实现分析
Linux的.a..so和.o文件 - chlele0105的专栏 - CSDN博客 https://blog.csdn.net/chlele0105/article/details/23691147 ...
随机推荐
- echarts使用记录(三):x/y轴数据和刻度显示及坐标中网格显示、格式化x/y轴数据
1.去掉坐标轴刻度线,刻度数据,坐标轴网格,以Y轴为例,同理X轴 xAxis: [{ type: 'category', axisTick: {//决定是否显示坐标刻度 alignWithLabel: ...
- IIS6.0 开启Gzip与PHP Gzip
因为在做一个项目,项目里面服务器主要提供数据,但是数据多了文件就大了,比较浪费流量和时间,我们便用Gzip来处理.我在本机上是apache,服务器上是IIS6.0,用的是php,那么我就在这里分享一下 ...
- 使用ASP.NET上传多个文件到服务器
在Email系统中经常会上传多个文件到服务器,用户大多习惯一次上传所有的文件,而不是逐个上传,我们可以使用javascript动态地添加file元素到表单,然后在服务器端处理这些file 效果图如下: ...
- 使用select处理任意数目个客户的单进程程序
改写http://www.cnblogs.com/nufangrensheng/p/3587962.html中的TCP回射服务器程序,把它重写成使用select来处理任意数目个客户的单进程程序,而不是 ...
- UNIX网络编程读书笔记:字节操纵函数
#include <strings.h> void bzero(void *dest, size_t nbytes); void bcopy(const void *src, void * ...
- ThinkPHP框架返回插入记录的id号
ThinkPHP返回插入记录的id号 $Form->create()) $result = $Form->add(); 在执行上述语句后,若存在auto_increment字段,则可以使用 ...
- Appium(JAVA)Windows 7系统搭建及示例运行
Appium(JAVA)Windows 7系统搭建及示例运行 分类: Appium 2014-11-14 17:44 4323人阅读 评论(2) 收藏 举报 1.搭建Android环境 http:// ...
- CI:关于计算智能
该书认为,当前的计算智能起源于人工智能和生物智能.人工智能的起源大约可以追溯到50年以前,而计算智能这个术语则仅仅出现于10年以前.计算智能由几个部分组成,即人工智能.模糊集和模糊逻辑.神经网络(有时 ...
- python如何获取公众号下面粉丝的openid
如何获取公众号下面粉丝的openid呢,首先要获取一个access_token,这个token可不是令牌(Token),如何获取这个access_token呢?有两种方法,方法如下: # -*- co ...
- 完善String类([]、 +、 += 运算符重载)、>>和<<运算符重载
在前面文章中使用过几次String类的例子,现在多重载几个运算符,更加完善一下,并且重载流类运算符. []运算符重载 +运算符重载 +=运算符重载 <<运算符重载 >>运算符重 ...