2011-10-18 83 views
1

所有,升壓池替代釋放calloc

如果使用升壓池庫,你會如何替換以下語句:

MyStruct *someStruct = (MyStruct *) calloc(numOfElements, sizeof(MyStruct)); 

如果它是一個元素,我會做:

boost::object_pool<MyStruct> myPool; 
MyStruct *someStruct = myPool.malloc(); 

但由於「numOfElements」是一個變量,我有感覺執行一個malloc()循環不是一個好主意嗎?

回答

3

我說你需要使用pool_alloc接口:

static pointer allocate(size_type n); 
static pointer allocate(size_type n, pointer); 
static void deallocate(pointer ptr, size_type n); 

樣品從http://www.boost.org/doc/libs/1_47_0/libs/pool/doc/interfaces.html

void func() 
{ 
    std::vector<int, boost::pool_allocator<int> > v; 
    for (int i = 0; i < 10000; ++i) 
     v.push_back(13); 
} // Exiting the function does NOT free the system memory allocated by the pool allocator 
    // You must call 
    // boost::singleton_pool<boost::pool_allocator_tag, sizeof(int)>::release_memory() 
    // in order to force that 
+0

將向'矢量:: reserve'通話還有意義,當'pool_allocator'是用過的? – pmr

+0

@pmr:我想;你認爲vector :: reserve會是_do_?(http://www.sgi.com/tech/stl/Allocators.html) – sehe

+0

我只是在想,調用'reserve'可能會干擾底層的分配策略池。我使用'pool_alloc'的經驗不好,我懷疑我發展了信任問題。 ;) – pmr