Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何为静态变量分配内存?_C#_.net_Memory Management - Fatal编程技术网

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

C# 如何为静态变量分配内存?,c#,.net,memory-management,C#,.net,Memory Management,在以下程序中: class Main { static string staticVariable = "Static Variable"; string instanceVariable = "Instance Variable"; public Main(){} } instanceVariable将存储在为对象实例分配的内存中。staticVariable将存储在哪里,它是存储在对象实例本身还是其他地方?如果它存储在其他地方,内存位置是如何连接的?静

在以下程序中:

class Main
{   
    static string staticVariable = "Static Variable";
    string instanceVariable = "Instance Variable";

    public Main(){}   
}

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

静态变量的内存通常保存在某个有根(和隐藏的)
对象[]
中。这可以看出做了一件好事!WinDbg中对象的gcroot(带SOS)


只需添加,这些引用永远不会被GCID(除非你忽略该字段),正如我最近发现的。< /P> < P>例如C++中的STATIC变量被分配在全局变量的全局内存空间中。编译器使用特殊的命名约定来知道这个变量属于这个类。

这是一个C#问题。将静态变量设为null是否真的会导致它被GC’ed。我真的很困惑。