使用boost :: object_pool无法清除。我在滥用吗?

时间:2012-05-08 02:12:53

标签: boost objectpool

我在程序中使用boost :: object_pool,但是我发现了一些问题,它无法退出。 下面是代码。不建议我使用boost :: pool。 boost :: 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;
}

此程序无法正常退出。为什么呢?

3 个答案:

答案 0 :(得分:1)

在我的机器上,如果速度很慢,这个程序可以正常工作。

调用“destroy”的循环非常慢;它似乎有一个O(N ^ 2)位;至少,对于循环大小每增加10倍,运行时间增加90倍。

以下是一些时间安排:

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

答案 1 :(得分:0)

有人打败了我 - 只是通过提升邮件列表看到了这个问题。

根据文档,destroy是O(N)所以肯定称N次对于大N来说并不理想 - 但我想像使用Object Pool析构函数本身(它为每个已分配的对象调用析构函数)本身O(N)对批量删除有很大帮助。)

我确实有一张图表显示了我机器上的计时 - 但由于我没有使用Stack Overflow,所以我无法发布它 - 好吧它没有显示那么多......

答案 2 :(得分:0)

我发布了一个从boost沙箱中的合并排序派生的修补程序:

https://github.com/graehl/boost/tree/object_pool-constant-time-free

或,独立:

https://github.com/graehl/Pool-object_pool