我指的是今天的主要静态语言(C,C ++,java,C#,)。我听说过这个有些矛盾的答案,所以我想知道:
如果我有一些代码,例如:
loop(...) {
type x = val;
...
}
('loop'是某种类型的循环,例如for,while) 它会在循环的每次迭代中导致内存分配,还是只导致一次?它与写这个不同:
type x;
loop(...) {
x = val;
...
}
其中内存仅为x?
分配一次答案 0 :(得分:1)
严格正确的答案是它取决于实现,因为两者在语义上都是正确的。没有语言规范要求或禁止此类实施细节。
也就是说,任何有价值的实现都能够重用相同的堆栈槽甚至CPU寄存器(使用本机编译,尤其是在存在JIT的情况下)。甚至字节码也可能完全相同。
最后,那就是过早优化的事情......除非另有证明,否则你甚至不应该考虑这样的低级细节(如果你认为对这些问题的知识和控制很重要,也许你应该只是编程在汇编程序中),因为: