c++ - 哪个更快 : Stack allocation or Heap allocation

标签 c++ performance memory stack heap-memory

这个问题听起来可能相当初级,但这是我与另一位合作开发人员的辩论。

我注意在可能的地方分配堆栈,而不是堆分配它们。他在和我说话并看着我的肩膀并评论说没有必要,因为他们在表现方面是一样的。

我一直认为堆栈的增长是常数时间,堆分配的性能取决于分配(找到合适大小的空洞)和取消分配(折叠空洞以减少)的堆的当前复杂性碎片化,因为如果我没记错的话,许多标准库实现在删除期间需要时间来执行此操作)。

这让我印象深刻,因为它可能非常依赖于编译器。特别是对于这个项目,我正在使用 Metrowerks PPC 的编译器建筑学。了解这种组合最有帮助,但一般来说,对于 GCC 和 MSVC++,情况如何?堆分配的性能不如堆栈分配吗?没有区别吗?或者差异如此之小以至于变成毫无意义的微优化。

最佳答案

堆栈分配要快得多,因为它真正做的只是移动堆栈指针。 使用内存池,您可以从堆分配中获得可比的性能,但这会稍微增加复杂性并带来一些麻烦。

此外,堆栈与堆不仅是性能方面的考虑;它还会告诉您很多有关对象的预期生命周期的信息。

关于c++ - 哪个更快 : Stack allocation or Heap allocation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4116660/

相关文章:

java - EhCache 的 CacheStatistics getCacheHits 与 getInMemoryHits

c++ - const 引用可以分配一个 int 吗?

C++ 函数指针 'base'

c++ - 如何消除这个多余的元素?

c++ - SPOJ - 勇敢生活线段树

java - Isabelle:Isabelle2013-2 版本的性能问题

arrays - 当查找映射到小整数的常量时,使用 case 语句还是常量数组更快?

c++ - 错误 : 'std::__cxx11::list<User>::iterator' {aka 'struct std::_List_iterator<User>' } has no member named XXX

performance - 通用多面体内的长方体

c - 在C中调用函数时,是否使用了操作系统的堆栈,堆栈的大小是否固定?