我在下面有一个类作为一个带有值类型变量的方法。
请有人解释一下,当我创建下面的对象然后堆栈上发生了什么以及堆上发生了什么?
我对Method1
中变量的位置感兴趣。
class A
{
public void Method1()
{
int i = 10;
}
}
A obj = new A();
obj.Method1();
答案 0 :(得分:5)
你很可能不需要知道这一点。对你来说,重要的是运行时的,而不是 它是如何做到的。运行时可以自由选择任何方式来实现局部变量。如你所知,它们可以保存在一个文件中(虽然这样做没有多大意义)。
如果你真的想知道,一般来说,有几种方法可以在内存中表示局部变量:
async
方法的方法中关闭变量。答案 1 :(得分:1)
对象本身在堆上(因为它是引用类型),对类(obj
)的引用进入堆栈,局部变量int i
是值类型并且去在堆栈上或被优化掉或进入寄存器。
但是你不应该关心.NET运行时的这些实现细节,因为它们理论上可以改变......并且对实现细节进行不必要的依赖编码是不好的做法恕我直言。