C++ tcmalloc距离纯堆栈分配性能有多近?

C++ tcmalloc距离纯堆栈分配性能有多近?,c++,performance,memory-management,low-latency,tcmalloc,C++,Performance,Memory Management,Low Latency,Tcmalloc,我的推理是,如果tcmalloc在下面维护一个无线程列表,从中可以满足动态分配,那么tcmalloc在平均情况下的性能应该非常接近堆栈分配(调整池大小的成本在许多操作中分摊) 这在实际操作中适用吗?是否存在我没有想到的反生成情况?堆栈分配由一条机器指令组成-更改堆栈指针。很难看出其他方案如何达到这种效率。通常,通过malloc类函数(当然有函数调用开销)使用堆栈分配和动态分配用于不同的目的,因此“更快”的问题是没有意义的 堆栈的一个非常重要的好处是,它可能位于CPU缓存中,并且位于打开的页面上。

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


这在实际操作中适用吗?是否存在我没有想到的反生成情况?

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

堆栈的一个非常重要的好处是,它可能位于CPU缓存中,并且位于打开的页面上。(DDR RAM,尽管名称不同,但实际上并不完全是随机访问。它具有真实的引用位置)如果您想使用堆栈分配,请尝试alloca。记住不要释放指针。不过,我希望获得更长的动态内存对象生命周期的好处。如果线程池是在后台管理的,那么这将非常方便。这听起来太好了,简直难以置信。事实上,在Windows上并不总是如此。通常,每个附加堆栈页都需要一个堆栈探测,以便Windows提交实际的RAM。一个好的编译器可能会证明所有数据访问都是顺序的,在这种情况下可以优化探测,但这是例外。