为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C++
呼啦一阵风 2019-07-03 11:08:48
这个问题听起来可能相当初级,但这是我与另一个与我一起工作的开发人员进行的一场辩论。我注意的是在可能的地方堆叠分配东西,而不是堆分配它们。他跟我说话,看着我,说没有必要,因为他们的表现是一样的明智。我一直有这样的印象:增加堆栈的时间是固定的,堆分配的性能取决于堆分配的当前复杂性(找到合适大小的漏洞)和去分配(折叠漏洞以减少碎片,因为如果我没有弄错的话,许多标准库实现需要时间在删除过程中做到这一点)。在我看来,这可能是非常依赖于编译器的。特别是对于这个项目,我使用的是都会的编译器PPC建筑。对这种组合的洞察力将是最有帮助的,但总的来说,对于GCC和MSVC+来说,情况是怎样的呢?堆分配不像堆栈分配那样高性能吗?没有区别吗?或者是如此微小的差异变成了毫无意义的微观优化。哪个更快:堆栈分配还是堆分配
查看完整描述

3 回答

?
心有法竹

TA贡献1866条经验 获得超5个赞

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

此外,堆栈和堆不仅是性能考虑因素;它还告诉您许多关于对象的预期生存期的信息。


查看完整回答
反对 回复 2019-07-03
?
MYYA

TA贡献1868条经验 获得超4个赞

堆栈要快得多。它实际上只在大多数体系结构上使用单一指令,在大多数情况下,例如在x86上:

sub esp, 0x10

(将堆栈指针向下移动0x10字节,从而“分配”这些字节供变量使用)。

当然,堆栈的大小非常有限,因为如果过度使用堆栈分配或尝试执行递归:-)

此外,几乎没有理由优化不需要它的代码的性能,例如通过分析演示的代码。“过早优化”通常会导致比它更多的问题。

我的经验法则:如果我知道我需要一些数据编译时,它的大小在几百个字节以下,我堆栈-分配它。否则我就堆-分配它。


查看完整回答
反对 回复 2019-07-03
  • 3 回答
  • 0 关注
  • 528 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信