【问题标题】:stack and global variables [closed]堆栈和全局变量
【发布时间】:2013-06-27 09:05:04
【问题描述】:

我发现将全局变量移动到本地范围可以节省堆栈分配。

节省堆栈分配是否也会提高程序的性能和速度? 如果是这样,你能给我一些显示这种改进的公式吗?

【问题讨论】:

  • 您在任何地方都找不到这种性质的公式。性能取决于大量因素,并且这些因素相互作用。因此,永远不会有一个公式可以预测性能如何随堆栈帧大小而变化。
  • 我不是在寻找一个确切的公式,只是想了解当堆栈分配减少时性能如何提高,甚至一点点。某种公式。

标签: c gcc stack global-variables


【解决方案1】:

将全局变量移动到本地范围实际上会增加堆栈分配要求。将全局变量移动到本地范围将减小可执行文件的大小。也许这就是你的意思。

一般来说,将变量从全局范围移动到局部范围,反之亦然,可能几乎没有性能差异。如果使用本地范围的任何内容将具有更好的性能,因为您将拥有更好的缓存使用模式。

但是,性能绝不应成为在全局范围和本地范围之间进行选择的驱动标准。始终根据语义做出选择。总是更喜欢局部范围而不是全局范围,这样做在语义上是合理的。

【讨论】:

  • 我测试过,它节省了堆栈分配。我测试了很多版本。
  • 添加局部变量会增加函数堆栈帧的大小。无论如何,最后一段是重要的。
  • 你是对的,但我使用的是一种使整个代码扁平化的技术。因此堆栈分配要求减少了一半。我只需要知道一个公式,它显示了当堆栈分配减少时性能如何提高。
  • 嗯,首先我们要明白你所说的“堆栈”是什么意思。你肯定在说别的东西。添加(和使用)局部变量将增加函数的堆栈帧。那么,“堆栈”是什么意思?
  • 请参阅 gcc -fstack-usage ,它向您展示了我在这个问题中引用的堆栈。 fstack-usage 显示使用我的编码技术将堆栈分配减少了一半。请不要担心技术或有用性。我正在询问一个公式,该公式显示当堆栈分配减少时性能(响应时间)如何增加。谢谢
猜你喜欢
  • 1970-01-01
  • 2017-04-17
  • 2019-02-16
  • 2011-04-13
  • 1970-01-01
  • 2015-01-03
  • 1970-01-01
  • 2014-12-09
  • 1970-01-01
相关资源
最近更新 更多