Hoe wordt geheugen toegewezen voor een statische variabele?

In het onderstaande programma:

class Main
{   
    static string staticVariable = "Static Variable";
    string instanceVariable = "Instance Variable";
    public Main(){}   
}

De instanceVariablewordt opgeslagen in het geheugen dat is toegewezen aan de objectinstantie. Waar wordt de staticVariableopgeslagen, wordt deze opgeslagen in de objectinstantie zelf of ergens anders? Als het ergens anders is opgeslagen, hoe zijn de geheugenlocaties dan verbonden?


Antwoord 1, autoriteit 100%

Geheugen voor statische variabelen wordt normaal bewaard in een geroot (en verborgen) object[]. Dit is te zien door een !gcroot op het object in WinDbg (met SOS) te doen.

Om toe te voegen, deze referenties kunnen nooit worden geGC’ed (tenzij je het veld ongeldig maakt), zoals ik onlangs ontdekte.


Antwoord 2

Bijvoorbeeld in C++ worden statische variabelen toegewezen in globale geheugenruimte met globale variabelen. Compiler gebruikt een speciale naamgevingsconventie om te weten dat deze variabele tot de klasse behoort.

Other episodes