如何为静态变量分配内存?
Posted
技术标签:
【中文标题】如何为静态变量分配内存?【英文标题】:How is memory allocated for a static variable? 【发布时间】:2010-09-25 02:53:25 【问题描述】:在下面的程序中:
class Main
static string staticVariable = "Static Variable";
string instanceVariable = "Instance Variable";
public Main()
instanceVariable
将存储在为对象实例分配的内存中。 staticVariable
将存储在哪里,它是存储在对象实例本身还是其他地方?如果它存储在其他地方,内存位置是如何连接的?
【问题讨论】:
【参考方案1】:静态变量的内存通常保存在一些有根(和隐藏)object[]
中。这可以看到在 WinDbg 中对对象执行 !gcroot(使用 SOS)。
补充一点,正如我最近发现的那样,这些引用永远不会被 GC 处理(除非您将该字段设为空)。
【讨论】:
将静态变量设为 null 是否会使其被 GC 处理。我真的很困惑。【参考方案2】:例如,在 C++ 中,静态变量与全局变量一起分配在全局内存空间中。编译器使用特殊的命名约定来知道该变量属于该类。
【讨论】:
这是一个 C# 问题以上是关于如何为静态变量分配内存?的主要内容,如果未能解决你的问题,请参考以下文章