比其他局部变量更本地化的变量(它真的“更本地化”吗?)或者只是“孤立的”;从其余的“与本地一样”的地方这# 39;s ?

本文关键字:本地化 一样 方这 与本地一样 真的 变量 局部变量 其他 更本地化 或者 孤立的 | 更新日期: 2023-09-27 18:13:46

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

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

下面是我的例子:

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

}

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

比其他局部变量更本地化的变量(它真的“更本地化”吗?)或者只是“孤立的”;从其余的“与本地一样”的地方这# 39;s ?

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

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

是很有用的

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

查看源码

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

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

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

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