gpt4 book ai didi

C++内存分配机制性能对比(tcmalloc vs. jemalloc)

转载 作者:IT老高 更新时间:2023-10-28 13:02:38 29 4
gpt4 key购买 nike

我有一个分配大量内存的应用程序,我正在考虑使用比 malloc 更好的内存分配机制。

我的主要选择是:jemalloc 和 tcmalloc。使用其中任何一个有什么好处吗?

http://locklessinc.com/benchmarks.shtml 中有一些机制(包括作者的专有机制--lockless)之间有很好的对比。它提到了它们各自的一些优点和缺点。

鉴于这两种机制都很活跃并不断改进。有没有人对这两者的相对表现有任何见解或经验?

最佳答案

如果我没记错的话,主要区别在于多线程项目。

两个库都试图通过让线程从不同的缓存中挑选内存来消除内存争用,但它们有不同的策略:

  • jemalloc (由 Facebook 使用)为每个线程维护一个缓存
  • tcmalloc (来自 Google)维护一个缓存池,线程对缓存产生“自然”的亲和力,但可能会发生变化

如果我没记错的话,这又导致了线程管理方面的一个重要差异。

  • jemalloc如果线程是静态的(例如使用池)会更快
  • tcmalloc创建/销毁线程时速度更快

还有一个问题是由于jemalloc旋转新的缓存以容纳新的线程 id,线程的突然高峰将使您在随后的平静阶段(大部分)空缓存。

因此,我会推荐 tcmalloc一般情况下,预留jemalloc用于非常具体的用途(应用程序生命周期内线程数的变化很小)。

关于C++内存分配机制性能对比(tcmalloc vs. jemalloc),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7852731/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com