2008-12-03 8 views
46

Dans le programme ci-dessous:Comment la mémoire est-elle allouée à une variable statique?

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

    public Main(){} 
} 

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

Répondre

10

La mémoire pour les variables statiques est normalement tenue dans certaines racines (et caché) 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 (sauf si vous annulez le champ), comme je l'ai découvert récemment.

0

Par exemple, en C++, les variables statiques sont allouées dans l'espace mémoire global avec des variables globales. Le compilateur utilise une convention de dénomination spéciale pour savoir que cette variable appartient à la classe.

Questions connexes