循环中的变量声明是否坏?

我指的是今天的主要静态语言(C,C ++,Java,C#)。 我听到过一些矛盾的答案,所以我想知道:

如果我有一些代码,如:

loop(...) {
  type x = val;
  ...
}

('循环'是某种类型的循环,例如for,while)
它会在循环的每次迭代中导致内存分配,还是只导致一次? 与写这篇文章有所不同:

type x;
loop(...) {
  x = val;
  ...
}

内存只分配一次x?


严格正确的答案是它取决于实现,因为两者在语义上都是正确的。 没有语言规范会要求或禁止这样的实现细节。

也就是说,任何值得其盐的实现都将能够重用相同的堆栈槽甚至CPU寄存器(使用本地编译,尤其是在存在JIT的情况下)。 即使是字节码也可能完全相同。

最后,有一些过早优化的东西......除非另有证明,否则您甚至不应该考虑像这样的低级细节(如果您认为对这些问题的知识和控制很重要,也许您应该只用汇编程序编程) ,因为:

  • 除非你在做一个微基准标记(或者是一个非常庞大的数字处理任务 - 但是有多少人会对这些性能感到恐惧?),即使它没有被优化,你甚至不会注意到任何差异。 如果你在循环体中做了任何有趣的事情,它将会改变它们的差异(如果有的话)。 特别是如果你正在做任何I / O。
  • 即使有内存分配,也可以归结为在本地堆栈上推送和弹出几个字节,这又归结为将一个整数常量添加到硬件寄存器。 所有的C和C ++程序都使用这个堆栈作为它们的局部变量,而非那些抱怨它的性能......如果你必须预留空间,你不能比使用堆栈更快。
  • 如果你不得不问这样的问题,你不是一个可以对此做任何事情的人。 那些人知道只是(1)测量它,(2)查看生成的代码,(3)在考虑这个级别之前寻找大规模的优化;)
  • 链接地址: http://www.djcxy.com/p/29805.html

    上一篇: Is variable declaration within a loop bad?

    下一篇: Why is iostream::eof inside a loop condition considered wrong?