boost学习之pool

#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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值