【问题标题】:How close does tcmalloc come to pure stack allocation performance?tcmalloc 与纯堆栈分配性能有多接近?
【发布时间】:2017-11-22 00:30:14
【问题描述】:

我的推理是,如果 tcmalloc 维护一个每个线程的空闲列表,从该列表下可以满足动态分配,那么 tcmalloc 在平均情况下的性能应该非常接近堆栈分配(调整池大小的成本是在许多操作中摊销)。

这在实际操作中是否成立?有没有我没有想到的退化案例?

【问题讨论】:

  • 堆栈的一个重要好处是它可能位于 CPU 缓存中,并且位于打开的页面上。 (DDR RAM,尽管它的名字,实际上并不是完全随机访问。它具有真实的引用局部性)
  • 如果你想使用栈分配,试试alloca。记住不要释放指针。
  • 我想获得动态内存更长的对象生命周期的好处。如果线程池在后台管理,那么这将非常方便。听起来确实好得令人难以置信。

标签: c++ performance memory-management low-latency tcmalloc


【解决方案1】:

堆栈分配由一条机器指令组成 - 更改堆栈指针。很难看到任何其他方案可以达到这种效率。而且您通常通过类似 malloc 的函数(当然有函数调用开销)使用堆栈分配和动态分配来实现不同的目的,因此“更快”的问题是没有实际意义的。

【讨论】:

  • 实际上,在 Windows 上并非总是如此。通常每个额外的堆栈页面都需要一个堆栈探测,以便 Windows 提交实际的 RAM。一个好的编译器可能会证明所有数据访问都是顺序的,其中可以优化探针,但那将是例外。
猜你喜欢
  • 2016-12-14
  • 2012-12-23
  • 2011-10-06
  • 2012-03-02
  • 1970-01-01
  • 2011-05-28
  • 2023-03-05
  • 2011-09-06
相关资源
最近更新 更多