49 votes

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

Dans le programme ci-dessous

 class Main{

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

public Main(){}

}
 

Les instanceVariable seront stockés dans la mémoire allouée pour l'instance d'objet. Où les staticvariable seront-ils stockés, est-il stocké dans l'instance même de l'objet ou ailleurs? Si son emplacement est stocké ailleurs, comment les emplacements de mémoire sont-ils connectés?

86voto

rajesh pillai Points 5180

La variable statique est stockée sur le tas, qu'elle soit déclarée dans un type de référence ou dans un type de valeur. Quel que soit le nombre d'instances créées, il n'y a qu'un seul emplacement au total.

Ce segment est distinct du segment de mémoire normal récupéré - il est appelé "segment de haute fréquence", et il en existe un par domaine d'application.

Vous trouverez la ressource ci-dessous utile Variable statique démystifiée

12voto

leppie Points 67289

La mémoire des variables statiques est normalement conservée dans certains object[] enracinés (et cachés). Ceci peut être vu en train de faire un! Gcroot sur l'objet dans WinDbg (avec SOS).

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

-1voto

Nikita Borodulin Points 580

Par exemple, en C ++, les variables staic sont allouées dans un 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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X