2008-12-03 15 views
46

en el siguiente programa:¿Cómo se asigna la memoria para una variable estática?

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

    public Main(){} 
} 

El instanceVariable será almacenada dentro de la memoria asignada para instancia de objeto. ¿Dónde se almacenará el staticVariable, se almacena en la instancia del objeto mismo o en otro lugar? Si está almacenado en otro lugar, ¿cómo están conectadas las ubicaciones de memoria?

Respuesta

10

La memoria para las variables estáticas se mantiene normalmente en algunos rooteados (y ocultos) object[]. Esto se puede ver haciendo un! Gcroot en el objeto en WinDbg (con SOS).

Solo para agregar, estas referencias nunca se pueden someter a GC (a menos que anule el campo), como descubrí recientemente.

0

Por ejemplo, en C++ las variables estáticas se asignan en el espacio de memoria global con variables globales. El compilador utiliza una convención de nomenclatura especial para saber que esta variable pertenece a la clase.

Cuestiones relacionadas