我曾经在boost :: pool中玩了几次,在我看来我正在用很多对象"churn"认真地敲打堆.通常我已经使用过boost::object_pool
,或者boost::pool_alloc
作为STL模板参数.然而,结果总是表明性能几乎没有变化,或者显着恶化.
我很想知道它有任何成功的故事.
我应该在分析输出中寻找什么样的东西,这可能表明boost :: pool可能会有所帮助?
实际上很难改进好的旧malloc吗?
内存池对于事务样式处理是最有效的imo,您可以在其中分配到池,然后在事务完成时,将其转储为遗忘.真正的加速并不是每个分配都会快得多,因为在极长的运行应用程序中,你将几乎没有内存碎片.
在排序中,听起来您的应用程序不保证使用内存池
是的,速度提高了500%.应用程序(相当愚蠢,但有时你必须使用你所得到的)将1 std :: map中的元素复制到循环中的另一个(在循环中有一些决策),以及在多线程/进程服务器上产生的分配导致堆争用.我在第二张地图上添加了boost池作为分配器,结果是应用程序执行速度提高了500%.
盲目优化并不好.尝试使用谷歌内存分配器,你甚至不需要重新编译你的应用程序.你可以在这里找到你需要知道的东西:
http://google-perftools.googlecode.com/svn/trunk/doc/tcmalloc.html
加埃塔诺