tcmalloc / jemalloc和内存池之间的区别是什么

时间:2012-03-26 03:08:35

标签: c linux memory malloc tcmalloc

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

2 个答案:

答案 0 :(得分:78)

这个blog链接到所有流行的malloc的详细描述。

this article引用了tcmallocjemalloc之间的一个重要区别,并建议选择哪一个。

this article完整地描述了jemalloc

背后的算法

答案 1 :(得分:3)

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

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

  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

我刚刚引用了其他人进行和发布的测试,而自己还没有测试过。我希望 这对您来说可能是一个很好的起点,并用它来测试和选择最适合的 您的应用程序。