可扩展的内存分配器体验

Sum*_*uma 8 c++ winapi memory-management multicore

我目前正在评估一些可扩展的内存分配器,即nedmalloc和ptmalloc(都建立在dlmalloc之上),作为默认malloc/new的替代品,因为在多线程环境中存在明显的争用.他们公布的表现似乎很好,但是我想检查一下真正使用它们的其他人的经历.

  • 您的绩效目标是否满足?
  • 您是否遇到任何意外或难以解决的问题(如堆损坏)?
  • 如果你已经尝试了ptmaalloc和nedmalloc,你会推荐哪两个?为什么(易用性,性能)?
  • 或者您可能会推荐另一个可扩展的分配器(免费提供允许的许可证)?

Sum*_*uma 5

我已经在我们的应用程序中实现了NedMalloc,我对结果非常满意.我之前看到的争论已经消失,分配器很容易插入,即使一般性能非常好,直到内存分配的开销已经超出应用程序现在接近无法估量.

我没有尝试过ptmalloc,因为我没有找到它的Windows就绪版本,一旦NedMalloc为我工作正常,我就失去了动力.

除了上面提到的两个之外,我认为尝试TCMalloc也很有意思 - 它在理论上有一些听起来比NedMalloc更好的特性(比如NedMalloc使用的4 B头,小分配的开销很小),但是因为它似乎没有准备好Windows端口,它可能也变得不容易.


使用NedMalloc几周后,我不得不放弃它,因为它的空间开销已经证明对我们来说太高了.特别打击我们的是NedMalloc似乎正在回收它不再以不良方式用于操作系统的内存,保持大部分内容仍然存在.现在我用JEMalloc替换它,它似乎不那么快(它仍然很快,但没有NedMalloc那么快),但它以这种方式非常强大,并且它的可扩展性也非常好.


在使用JEMalloc几个月后,我已切换到TCMalloc.与其他产品相比,它需要花费更多努力来适应Windows,但它的结果(性能和碎片)似乎对我们迄今为止测试的最好.

  • @skoy您可以在http://community.bistudio.com/wiki/ArmA_2:_Custom_Memory_Allocator找到我们所有分配器的来源 - 基于TCMalloc的分配器位于ftp://downloads.bistudio.com/arma2.com/update/Allocs /TCMalloc_source.7z.您可以注意到我们已经更改了TCMalloc_SystemAlloc和TCMalloc_SystemRelease.注意:我们已基于大规模性能和稳定性测试同时切换到Intel TBB分配器. (2认同)