猿问

哪个更快:堆栈分配还是堆分配

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

我注意的是在可能的地方堆叠分配东西,而不是堆分配它们。他跟我说话,看着我,说没有必要,因为他们的表现是一样的明智。

我一直有这样的印象:增加堆栈的时间是固定的,堆分配的性能取决于堆分配的当前复杂性(找到合适大小的漏洞)和去分配(折叠漏洞以减少碎片,因为如果我没有弄错的话,许多标准库实现需要时间在删除过程中做到这一点)。

在我看来,这可能是非常依赖于编译器的。特别是对于这个项目,我使用的是都会的编译器PPC建筑。对这种组合的洞察力将是最有帮助的,但总的来说,对于GCC和MSVC+来说,情况是怎样的呢?堆分配不像堆栈分配那样高性能吗?没有区别吗?或者是如此微小的差异变成了毫无意义的微观优化。

哪个更快:堆栈分配还是堆分配

呼啦一阵风
浏览 529回答 3
3回答

心有法竹

堆栈分配要快得多,因为它真正做的就是移动堆栈指针。使用内存池,您可以从堆分配中获得类似的性能,但这会带来稍微增加的复杂性和它自己的麻烦。此外,堆栈和堆不仅是性能考虑因素;它还告诉您许多关于对象的预期生存期的信息。

MYYA

堆栈要快得多。它实际上只在大多数体系结构上使用单一指令,在大多数情况下,例如在x86上:sub esp, 0x10(将堆栈指针向下移动0x10字节,从而“分配”这些字节供变量使用)。当然,堆栈的大小非常有限,因为如果过度使用堆栈分配或尝试执行递归:-)此外,几乎没有理由优化不需要它的代码的性能,例如通过分析演示的代码。“过早优化”通常会导致比它更多的问题。我的经验法则:如果我知道我需要一些数据编译时,它的大小在几百个字节以下,我堆栈-分配它。否则我就堆-分配它。
随时随地看视频慕课网APP
我要回答