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