2012-05-08 34 views
0

我在我的程序中使用boost :: object_pool,但是我發現了一些問題,它不能退出。 以下是代碼。不要建議我使用boost :: pool。 boost :: pool沒有問題,只討論boost :: object_pool。有人能幫助我嗎?使用boost :: object_pool不能清晰地退出。我濫用了嗎?

#include <iostream> 
#include <boost/pool/object_pool.hpp> 

int main(void) { 
    boost::object_pool<int> p; 
    int count = 1000*1000; 
    int** pv = new int*[count]; 

    for (int i = 0; i < count; i++) 
      pv[i] = p.construct(); 
    for (int i = 0; i < count; i++) 
      p.destroy(pv[i]); 

    delete [] pv; 

    return 0; 
} 

該程序不能正常退出。爲什麼?

回答

1

在我的機器上,如果速度非常慢,此程序將正常工作。

調用「摧毀」的循環非常緩慢;它似乎有一個O(N^2)位;至少,通過的90

這裏的一個因素每增加10倍的循環,運行時間增加的大小是一些計時:

1000 elements  0.021 sec 
10000 elements  1.219 sec 
100000 elements  103.29 secs (1m43.29s) 
1000000 elements  13437 secs (223m57s) 
0

有人打我了吧 - 剛看到這個問題通過boost郵件列表。

根據文檔destroy是O(N)所以肯定調用N次對於大N來說並不理想 - 但我想象使用Object Pool析構函數本身(它調用每個分配對象的析構函數)本身O(N)會對批量刪除有很大幫助)。

我確實有一個顯示我的機器上的時序圖 - 但因爲我沒有使用堆棧溢出太多,我不能將它張貼 - 啊不表明多...