web-dev-qa-db-fra.com

Comment la mémoire est-elle allouée à une variable statique?

Dans le programme ci-dessous:

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

    public Main(){}   
}

instanceVariable sera stocké dans la mémoire allouée à l'instance d'objet. Où le staticVariable sera-t-il stocké, est-il stocké dans l'instance d'objet elle-même ou ailleurs? S'il est stocké ailleurs, comment les emplacements de mémoire sont-ils connectés?

49
gk.

La mémoire pour les variables statiques est normalement conservée dans certaines racines (et cachées) object[]. Cela peut être vu faire un! Gcroot sur l'objet dans WinDbg (avec SOS).

Juste pour ajouter, ces références ne peuvent jamais être GC'ed (à moins que vous n'annuliez le champ), comme je l'ai découvert récemment.

12
leppie