boost内存储器池(pool)
boost内存池(pool)
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); } }