2008-12-03 11 views
46

Im folgenden Programm:Wie ist der Speicher für eine statische Variable reserviert?

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

    public Main(){} 
} 

Die instanceVariable wird innerhalb der für Objektinstanz zugewiesenen Speicher gespeichert werden. Wo wird die staticVariable gespeichert, ist es in der Objektinstanz selbst oder anderswo gespeichert? Wenn es woanders gespeichert ist, wie sind die Speicherplätze verbunden?

Antwort

10

Speicher für statische Variablen werden normalerweise in einigen verwurzelten (und versteckten) object[] gehalten. Das kann man sehen, wenn man in WinDbg (mit SOS) ein! Gcroot auf dem Objekt macht.

Nur hinzufügen, diese Referenzen können nie GC'ed werden (außer Sie das Feld Null), wie ich kürzlich entdeckt.

0

Zum Beispiel werden in C++ statische Variablen im globalen Speicherbereich mit globalen Variablen zugewiesen. Der Compiler verwendet spezielle Namenskonventionen, um zu wissen, dass diese Variable zur Klasse gehört.

Verwandte Themen