【发布时间】:2015-12-17 17:31:08
【问题描述】:
我有一个非常小而直接的问题,我想得到一个确定的答案,并提前谢谢你们:
在方法内部(例如 main ),我可以为代码的任何部分添加花括号 {},以将某些行限定为局部变量。
这是我的例子:
public static void Main (string[] args)
{
int a = 1;
{ int b = 2;
Console.WriteLine(b);
}
Console.WriteLine(a);
}
变量“int b”在花括号的外侧显然是不可访问的,现在我的问题是关于这个变量的内存位置,它是否会与 main 方法在同一个堆栈帧中内存堆栈,或者它将被保存在主方法堆栈顶部的新堆栈帧中(如被调用方法的参数和另一个方法中的局部变量)?
【问题讨论】:
-
答案会因语言而异,用语言标记它有助于向可以提供帮助的人发出信号。这看起来像 C#,是吗?
-
是的,没错,虽然我无法想象这将取决于 .NET 语言中的哪种语言
-
使用 C# 或 .NET 对其进行标记,具有该专业知识的人将能够提供帮助。我自己是个JS人。 :)
-
我会的。谢谢你,克里斯
-
检查生成的 IL 代码。它们(也许很明显?)是等价的。 他们将留在哪里不像本地/班级成员那么简单。编译器将根据当前的实现决策及其类型决定。
标签: c# memory-management scope local-variables stack-memory