首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 操作系统 >

boost内存储器池(pool)

2012-12-22 
boost内存池(pool)templatetypename UserAllocator ... class pool{public://接受一个size_type类型的

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

热点排行