变量比其他局部变量更局部(它真的"more local"还是只是"isolated"其余的"as local as"?



我有一个非常小而直接的问题,我希望得到一个明确的答案,提前感谢大家:

在方法内部(例如main),我可以为代码的任何部分添加花括号{},以将某些行限定为局部变量。

下面是我的例子:

public static void Main (string[] args)
{
int a = 1;
{ int b = 2;
Console.WriteLine(b); 
}
Console.WriteLine(a);

}

变量"int b"显然在花括号的外面是不可访问的,现在我的问题是关于这个变量的内存位置,它是否会在相同的堆栈框架中与相同的内存堆栈中的主方法,或者它将被保存在主方法堆栈顶部的新堆栈框架中(如调用方法的参数和另一个方法中的局部变量)?

不,大括号不作为堆栈帧b也是main方法&是否会被视为与a相同,但有额外的范围因此,它将与main方法在相同的堆栈帧中在相同的内存堆栈中

我认为区分生存期作用域:

是很有用的

生存期和作用域经常被混淆,因为局部变量的生存期和作用域之间有很强的联系。最简洁的说法是,保证局部变量的内容至少在当前"执行点"内有效。在局部变量的作用域内。"至少一样长";当然意味着"或更长;;例如,捕获局部变量会延长其生存期

查看源码

同样,根据这个答案并对它进行评论:

这是JIT编译器的实现细节。

c#代码被翻译成IL代码和

IL与操作堆栈一起工作,但这并不直接对应于'调用堆栈'

相关内容

最新更新