如何为静态变量分配内存?

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# 问题

以上是关于如何为静态变量分配内存?的主要内容,如果未能解决你的问题,请参考以下文章

静态变量的内存分配

变量的存储和作用域

java中的全局变量和静态变量是在编译时分配内存还是在加载时分配内存??

全局变量局部变量静态全局变量静态局部变量在内存里的区别

程序的内存分配

java内存分配实例