zoukankan      html  css  js  c++  java
  • boost准模板库内存管理中pool和object_pool的使用

    首先,在敲代码之前,必须改动一个问题。要不然,无法链接:

     boost安装文件夹:D:oost。
          找到D:oostoost_1_55_0includeoost-1_55oostsystemerror_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,就不在此处列出来了。

  • 相关阅读:
    WPF自定义RoutedEvent事件代码段
    微信聊天和通讯录按钮样式
    【转】c#、wpf 字符串,color,brush之间的转换
    模块式开发
    通过属性进行浅拷贝
    【转】string.Format对C#字符串格式化
    酷学习笔记——前言
    C# 连蒙带骗不知所以然的搞定USB下位机读写
    C# Ioc、DI、Unity、TDD的一点想法和实践
    虹软人脸识别速度测试征集
  • 原文地址:https://www.cnblogs.com/wzjhoutai/p/6743050.html
Copyright © 2011-2022 走看看