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 ...
随机推荐
- Exdata cell 节点配置时遇到的一个问题
问题描写叙述: [celladmin@vrh4 ~]$ cellcli CellCLI: Release 11.2.3.2.0 - Production on Sat Jun 14 09:11:08 ...
- Java中字符串相等与大小比較
在C++中,两个字符串比較的代码能够为: (string1==string2) 但在java中,这个代码即使在两个字符串全然同样的情况下也会返回false Java中必须使用string1.equal ...
- UNIX网络编程读书笔记:套接口地址结构
前言 大多数套接口函数都需要一个指向套接口地址结构的指针作为参数.每个协议族都定义它自己的套接口地址结构.这些结构的名字均以"sockaddr_"开头,并以对应每个协议族的唯一后缀 ...
- 第十六周oj刷题——Problem I: 改错题:类中私有成员的訪问
Description 改错题: 设计一个日期类和时间类,并编写全局函数display用于显示日期和时间. 要求:display函数作为类外的普通函数,而不是成员函数 在主函数中调用display函数 ...
- 算法笔记_154:算法提高 日期计算(Java)
目录 1 问题描述 2 解决方案 1 问题描述 问题描述 已知2011年11月11日是星期五,问YYYY年MM月DD日是星期几?注意考虑闰年的情况.尤其是逢百年不闰,逢400年闰的情况. 输入格式 ...
- python发送邮件实例1
文件形式的邮件 #!/usr/bin/env python3 #coding: utf-8 import smtplib from email.mime.text import MIMEText fr ...
- 轻轻的我走了,正如我轻轻的来——Duilib无焦点窗体的实现
在Windows编程中,我们已经习惯了一个窗体从创建到显示并获得焦点. 我们总感觉一个窗体创建出来获得焦点是理所理所当然的.一个窗体仅仅要显示就必须获得焦点.一个新窗体显示时.会收到到WM_SETFO ...
- BOM*创建工艺路线
--工艺路线 DECLARE -- API input variables l_operation_tbl bom_rtg_pub.operation_tbl_type := bom_rtg_pub. ...
- Java反射机制及Method.invoke详解
JAVA反射机制 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法:这种动态获取的信息以及动态调用对象的方法的功能称为ja ...
- C# 实体集合和实体转换成相应的string、XDocument、XElement、XDocument
https://msdn.microsoft.com/zh-cn/library/system.xml.linq.xelement(v=vs.110).aspx XElement.Parse 方法 ( ...