在以下程序中:
class Main
{
static string staticVariable = "Static Variable";
string instanceVariable = "Instance Variable";
public Main(){}
}
instanceVariable
将存储在为对象实例分配的内存中。 staticVariable
将存储在哪里,它是存储在对象实例本身还是其他地方?如果它存储在其他地方,那么内存位置是如何连接的?
答案 0 :(得分:12)
静态变量的内存通常保存在某些有根(和隐藏)object[]
中。可以看到在WinDbg(带有SOS)的对象上执行!gcroot。
只是添加,这些引用永远不会被GC(除非你将字段置空),正如我最近发现的那样。
答案 1 :(得分:-1)
例如,在C ++中,静态变量在具有全局变量的全局内存空间中分配。编译器使用特殊的命名约定来知道该变量属于该类。