C# – How is memory allocated for a static variable


In the below program:

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

    public Main(){}   

The instanceVariable will be stored inside the memory allocated for object instance. Where will the staticVariable be stored, is it stored in the object instance itself or somewhere else? If its stored somewhere else, how are the memory locations connected?

Best Answer

Memory for static variables are normally held in some rooted (and hidden) object[]. This can be seen doing a !gcroot on the object in WinDbg (with SOS).

Just to add, these references can never be GC'ed (unless you null the field), as I discovered recently.