【问题标题】:How long does it take to access stack memory?访问堆栈内存需要多长时间?
【发布时间】:2020-02-28 15:16:16
【问题描述】:

一遍又一遍地重新声明同一个变量会影响代码的性能吗?

int i,a;
for(i=0;i<10;i++)
{
// Some operations with a
}

V/S

int i;
for(i=0;i<10;i++)
{
int a;
// Some operations with a
}

【问题讨论】:

  • 完全不正确的假设。由于as-if rule,没有任何区别。
  • 在第二个示例中,int a; 的存储很可能只为函数的每次调用分配一次。在for 循环中定义它会限制编译器允许的对它的访问(其范围),即使它实际存在于代码块之外。
  • 我不明白你所说的“调用堆栈”是什么意思。
  • 通常这样做是为了限制a 的范围,而不是节省堆栈空间。
  • 让编译器来处理:不用担心微优化。

标签: c performance memory time


【解决方案1】:

通常“堆栈变量”,即真正的局部变量,是零成本的。您需要付出的唯一代价是进行某种初始化。

编译器可能会也可能不会为该值保留内存。在第二种情况下,您实际上并没有使用a,因此它可能会被优化过程消除,从而真正实现零成本。

不要从“堆栈”的角度来考虑它们。这是一个早于优化编译器的过时概念。

【讨论】:

  • 那么在循环块中声明变量不会影响性能,因为局部变量在其作用域结束时被销毁?
  • 查看程序集输出以确定。
  • 如何检查?
  • 每个编译器都有不同的方法,但他们都能做到。
  • 也许吧,但那个编译器是博物馆级别的。为什么不使用 Visual Studio Express?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-26
  • 2012-11-08
  • 2015-09-27
  • 1970-01-01
  • 2021-09-15
  • 1970-01-01
相关资源
最近更新 更多