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