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

你可能感兴趣的:(C++,c,C#)