boostメモリプール(pool)

1878 ワード


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