boost学习之pool

来源:互联网 发布:淘宝鞋主页设计图片 编辑:程序博客网 时间:2024/04/28 20:17
#include<boost/pool/pool.hpp>#include <boost/pool/object_pool.hpp>#include <boost/pool/single_poolton.hpp>#include <iostream>#include <string>#include <assert.h>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(int argc, char** argv){    //简单内存池,只能作用域int long 简单的    pool<> p1(sizeof(int));//0m~@个m~O0m~H~Fm~E~Mintm~Z~Dm~F~E0m~X0m|     //pool分配内存失败不检测异常,所以使用应该检测    int* p =(int*)p1.malloc();    assert(p1.is_from(p)) ;// m~X[0m~Nm~F~E0m~X0m| 中m~H~Fm~E~Mm~H0m~Z~D    p1.free(p); //m~[| 为0m~Km~][0m~Am~T[0m~Lm~I~@以m~G~Jm~T[0m~L0m~Bm~^~\m~F~E0m~X0m| 大0m~O0m~_m~Z~D0m~]0m~Lm~O0m~Mm~G~Jm~Tm    for(int i = 0; i< 100; i++)    {        p1.ordered_malloc(10);//m~@~@m~G[0m~\m~T0m~_~_m~P~Nm~G0m~J0m~G~Jm~Tm    }    //object_pool    object_pool<demo_class> pde;//对象内存池        demo_class* pdc = pde.malloc(); //分配原始内存块,分配时并不调用构造函数,请注意    assert(pde.is_from(pdc));     assert(pdc->a != 1); //指向的内存未做初始化    pdc =pde.construct(7,8,9); //构造一个对象,可以传递参数,和构造函数保持一致    assert(pdc->a == 7);    //推荐直接只用construct,//不是先malloc,再construct    //construct 默认最多接受3个参数    object_pool<string> ops;    for(int i=0 ; i<10;i++)    {            string *s = ops.construct("hello object");//construct内部会自己malloc            cout << *s << endl;//出作用域后自动释放    }    //single_pool 类始于static的模式,需要手动释放内存    //single_pool 模板第一根参数为分配的单价类型,第二个参数为分配的大小    typedef singleton_pool<demo_class, sizeof(demo_class)> sps; //单件内存池定义        demo_class* dc1 = (demo_class*)sps::malloc(); //全部采用静态调用    assert(sps::is_from(dc1));    sps::release_memory();     return 0;}

原创粉丝点击