你有没有通过使用boost :: pool获得显着的加速?

时间:2009-01-23 14:16:22

标签: c++ optimization memory-management boost malloc

我曾经在boost :: pool中玩了几次,在我看来我正在用很多对象“churn”认真地敲打堆。通常我使用boost::object_poolboost::pool_alloc作为STL模板参数。然而,结果总是表现基本没有变化,或者显着恶化。

我很想知道它有任何成功的故事。

我应该在分析输出中寻找什么样的东西,这可能表明boost :: pool可能会有所帮助?

实际上很难改进好的旧malloc吗?

4 个答案:

答案 0 :(得分:20)

内存池对于事务样式处理是最有效的imo,您可以在其中分配到池,然后在事务完成时,将其转储为遗忘。真正的加速并不是每个分配都会快得多,因为在一个运行时间非常长的应用程序中,你将几乎没有内存碎片。

在排序中,听起来您的应用程序不保证使用内存池

答案 1 :(得分:16)

是的,速度提高500%。应用程序(相当愚蠢,但有时你必须使用你所得到的)将1 std :: map中的元素复制到循环中的另一个(在循环中有一些决策),以及在多线程/进程服务器上产生的分配导致堆争用。我在第二张地图上添加了boost池作为分配器,结果是应用程序执行速度提高了500%。

答案 2 :(得分:10)

盲目优化并不好。尝试使用谷歌内存分配器,你甚至不需要重新编译你的应用程序。你可以在这里找到你需要知道的东西:

http://google-perftools.googlecode.com/svn/trunk/doc/tcmalloc.html

加埃塔诺

答案 3 :(得分:3)

在开始优化内存分配之前,您可能希望首先跟踪性能问题。

因此,缩小分析范围以确定问题的位置。这可能是对相同代码的大量调用,只需调用一次就可能不会很长时间。