【问题标题】:What are the differences between (and reasons to choose) tcmalloc/jemalloc and memory pools?tcmalloc/jemalloc 和内存池之间有什么区别(以及选择的理由)?
【发布时间】:2012-04-09 14:29:07
【问题描述】:

tcmalloc/jemalloc 是改进的内存分配器,还引入了内存池以实现更好的内存分配。那么它们之间有什么区别以及如何在我的应用程序中选择它们呢?

【问题讨论】:

  • 何不同时尝试一下,看看哪一个更适合您?如果我们没有关于您的用例的更多信息,这个问题就没有正确的答案。
  • 首先,您的应用程序必须进行大量分配/deallocaitons。然后它必须是真正的性能关键。然后你必须分析它并证明堆分配实际上是你的瓶颈。只有这样开始尝试不同的分配器才有意义。您的库存可能已经足够了。
  • 只要您每秒不处理数千个分配,使用其中任何一个都是没有意义的。它们是为特定目的而构建的。不要将它们与作为静态内存分配的内存池混为一谈,在这种情况下,必须使用适合您的程序的独特逻辑来处理行为。

标签: c linux memory malloc tcmalloc


【解决方案1】:

这取决于您的程序的要求。如果你的程序有更多的动态内存分配,那么你 需要从可用的分配器中选择一个内存分配器,这将产生最佳的性能 退出你的程序。

要获得良好的内存管理,您至少需要满足以下要求:

  1. 检查您的系统是否有足够的内存来处理数据。
  2. 您是否已经从可用内存中分配?
  3. 将使用的内存/释放的内存返回到池(程序或操作系统)

一个好的内存管理器的能力可以根据(至少)它在检索/分配和分配方面的效率来测试 返回/删除内存。 (还有更多条件,例如缓存位置、管理开销、VM 环境、小型或大型 环境、线程环境等。)

关于 tcmalloc 和 jemalloc 有很多人做过比较。参考其中一个 比较:

http://ithare.com/testing-memory-allocators-ptmalloc2-tcmalloc-hoard-jemalloc-while-trying-to-simulate-real-world-loads/

如果线程数较少,tcmalloc 在每次分配的 CPU 周期方面得分高于所有其他分数。 jemalloc 非常接近 tcmalloc 但比 ptmalloc (std glibc 实现) 更好。

在内存开销方面jemalloc最好,其次是ptmalloc,其次是tcmalloc。

总的来说可以说jemalloc的得分高于其他人。您还可以在此处阅读有关 jemalloc 的更多信息:

https://www.facebook.com/notes/facebook-engineering/scalable-memory-allocation-using-jemalloc/480222803919

我刚刚引用了其他人完成和发布的测试,我自己没有测试过。我希望 这对您来说可能是一个很好的起点,并使用它来测试和选择最适合的 你的申请。

【讨论】:

    猜你喜欢
    • 2013-05-31
    • 1970-01-01
    • 2014-07-10
    • 1970-01-01
    • 2018-01-16
    • 2010-12-19
    • 2011-04-16
    • 2014-06-04
    • 2012-02-09
    相关资源
    最近更新 更多