内存分配问题?

Vai*_*ain 5 .net c# oop memory-management

public static void Main()
        {
            Test t1 = new Test();
}
Run Code Online (Sandbox Code Playgroud)

何时t1(引用变量)将在编译时或运行时获得内存.
我认为应该是运行时间.但是当我在Main方法中设置断点并监视t1时,它为空.所以这意味着t1在记忆中.

如果我错了,请纠正我.

编辑:我听说静态成员变量是在编译时分配的.

Nei*_*ell 5

内存仅在运行时分配(在编译时您的应用程序未运行).

在运行时,您的t1变量null在赋值发生后只有一个值(即不是),因此它取决于您放置断点的位置.如果你把你的断点放在方法的右括号上,Main并在它被击中时检查观察窗口,你会看到我的意思.

即如果您将断点放在分配行上,Test1 t1 = new Test1();那么该行尚未执行,因此分配尚未发生.


Lee*_*Lee 3

引用 t1 被分配在 Main 方法的堆栈帧上 - 您分配给它的值(即“new Test()”部分)在运行时在堆上分配 - 这就是 t1 变量在该行之前存在的原因已执行且为空。

  • 是的,对象是在堆上创建的,但引用将在堆栈上 (3认同)