我在程序中使用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;
}
此程序无法正常退出。为什么呢?
答案 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
或,独立: