boost内存池(pool)


template<typename UserAllocator = ... >
class pool
{
public:
//接受一个size_type类型的整数,指示每次分配内存块的大小(不是内存池的大小)
explicit pool(size_type requested_size);
~pool();
//返回requested_size
size_type get_requested_size()const;

//用void*指针返回从内存池中分配的内存块,大小为requested_size,如果分配失败返回0,不会抛出异常
void * malloc();//从内存池中任意分配一个内存块
void * ordered_malloc();//分配的同时合并空闲块链表
void * ordered_malloc(size_type n);//连续分配n块内存
bool is_from(void * chunk)const;//测试chunk是否是从这个内存池分配出去的

/*下面的函数一般都不应该由程序员调用*/
//一般情况下内存池会自动管理内存分配,不应该调用free(),除非内存池空间已经不足,必须释放已经分配的内存
void free(void *chunk);
void ordered_free(void * chunk);
void free(void *chunk,size_type n);
void ordered_free(void *chunk,size_type n);

//让内存池释放所有未被分配的内存,但已分配的内存块不受影响
bool release_memory();
//强制释放pool持有的所有内存,不管内存块是否被使用,析构函数就是调用的purge_memory()
bool purge_memory();
};



pool用法

#include<boost/pool/pool.hpp>
#include<iostream>
#include<cassert>
using namespace boost;
using namespace std;
int main()
{
pool<> p1(sizeof(int));
cout << p1.get_requested_size() << endl;//4
//只能用如普通数据类型,不能用于复杂的类和对象,因为它只调用内存,不调用构造函数,类和对象请看object_pool
int *p = (int *)p1.malloc();
if(NULL==p){
cout << "这种情况极少出现"<<endl;
return 0;
}
double *d = (double *)p1.malloc();
cout << p1.is_from(d) << endl;
assert(p1.is_from(d));

p1.free(p);
for(int i=0;i<100;++i){
p1.ordered_malloc(10);
}
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值