静态变量的内存分配是如何进行的?

51
在下面的程序中:
class Main
{   
    static string staticVariable = "Static Variable";
    string instanceVariable = "Instance Variable";

    public Main(){}   
}

instanceVariable将存储在为对象实例分配的内存中,那么staticVariable会存储在哪里呢?它是存储在对象实例本身还是其他地方?如果它存储在其他地方,那么内存位置是如何连接的呢?

2个回答

13

静态变量的内存通常保存在某些根对象(且隐式)object[]中。可以使用WinDbg(带SOS)对对象执行!gcroot来查看这一点。

补充一下,我最近发现这些引用永远不会被GC回收(除非将字段设置为null)。


将静态变量设置为null会使其被垃圾回收,这是真的吗?我很困惑。 - Masuri

-1
例如,在C++中,静态变量与全局变量一样分配在全局内存空间中。编译器使用特殊的命名约定来确定该变量属于哪个类。

这是一个C#问题。 - StayOnTarget

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接