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?
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.