【问题标题】:Why does ubuntu ship with a memory allocator that is 2x slower than google tcmalloc?为什么 ubuntu 附带的内存分配器比 google tcmalloc 慢 2 倍?
【发布时间】:2011-08-14 19:12:37
【问题描述】:

这里的基准:

On the use and abuse of alloca

我假设其他 Unices 也是如此,当 google perftools 存在时,它比标准分配器快 2 倍(多一点),为什么发行版仍然带有次优的发行版?请记住,tcmalloc 已经可用了 5 年以上。

【问题讨论】:

  • tcmalloc 的基准在哪里?该链接将 malloc 与 alloca 进行比较。显然,堆栈分配将比堆快。链接中甚至没有提到 tcmalloc。
  • 你知道,说“perftools = tcmalloc”就足够了。谷歌上的 tcmalloc 页面只有一次引用 perftools 作为头文件。不明显。
  • 好吧,我假设您给了我“-1”,这有点激进,如果我的问题遗漏了部分内容,那是因为它适用于至少了解主题的人...
  • 问题是我知道主题,我什至知道 tcmalloc 的基准。除非您实际使用它进行编码,否则完全不明显它是 perftools 的一部分。此外,我仍然认为它不是一个好的基准。它是单线程的,并且它有一个完全没有碎片的堆:一个不现实的使用场景。

标签: c++ linux memory-management


【解决方案1】:

很少有东西比其他东西“快 2 倍”。它可能在 90% 的时间内快 2 倍,在 10% 的时间里慢 10 倍。对于一般的系统分配器,您需要始终表现良好的东西,而不是非常擅长特定情况的东西。这可能就是为什么默认分配器不是 tcmalloc 的原因 - 它至少需要在所有方面都可以,而不是超级专业。

【讨论】:

  • 这也是我的假设,但是如果您查看 tcmalloc 实现规范,它是非常通用的,从单线程到多线程,我能看到的唯一权衡是空间开销。
  • 我找到的文档显示它默认分配 6MB 的内存。也许对于一个并不多的浏览器来说,但对于像 lscat 这样的程序来说,这是一个可怕的开销!
  • @AshleysBrain,我不明白你从哪里得到“10% 的时间慢 10 倍”的数字。我的意思是,我目前正在积极地在我自己的大量多线程代码中寻找性能改进,这些代码仍然只能在主线程中运行。而且我没有看到性能下降等,但在线程化时会获得非常大的性能提升。但是,我不是 100% 的开发用户群。我只是想在有人声称它应该是之前得到下降的证据。关于 6MB,我认为这不是问题,现在,在 2013 年,人们在他们的个人电脑上安装了 4 到 32GB 的 RAM。
猜你喜欢
  • 2016-10-28
  • 2021-04-12
  • 2015-02-20
  • 1970-01-01
  • 2014-05-29
  • 2011-12-12
  • 2020-12-14
  • 1970-01-01
  • 2014-10-04
相关资源
最近更新 更多