<分区>
所以在 C# 中,您可能有以下代码:
void DoSomething()
{
//some code.
int x = 5;
//some more code.
}
一旦您输入 DoSomething,CLR 就会为 int x 设置空间。为什么它不等到它到达上面有 int x =5 的那一行?特别是即使 x 是绑定(bind)的,它也不会让你实际使用它,直到到达那条线为止?
<分区>
所以在 C# 中,您可能有以下代码:
void DoSomething()
{
//some code.
int x = 5;
//some more code.
}
一旦您输入 DoSomething,CLR 就会为 int x 设置空间。为什么它不等到它到达上面有 int x =5 的那一行?特别是即使 x 是绑定(bind)的,它也不会让你实际使用它,直到到达那条线为止?
最佳答案
As soon as you enter
DoSomething
, the CLR sets up space forint x
. Why does it not wait until it reaches the line withint x = 5
on it?
该问题无法回答,因为整个问题都建立在错误的前提之上。局部变量的存储空间可能是:
C# 编译器和 jit 编译器肯定会确保以正确的方式分配本地存储,并尝试确保其高效。他们如何选择这样做取决于具体情况。预先分配空间可能更有效,并且仅在变量被使用时才分配它可能更有效;在选择局部变量的生命周期时,允许抖动有很大的自由度。如果抖动可以在不违反程序正确性的情况下这样做,则允许局部变量的生存时间比它们的范围所暗示的更长或更短。
由于问题的前提不正确,所以问题没有答案。问一个更好的问题。
关于c# - 为什么 C# 预先绑定(bind)局部变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9105377/