c# - method - ¿Cómo se asigna la memoria para una variable estática?
variables static c# (2)
En el siguiente programa:
class Main
{
static string staticVariable = "Static Variable";
string instanceVariable = "Instance Variable";
public Main(){}
}
La instanceVariable
se almacenará dentro de la memoria asignada para la instancia del objeto. ¿Dónde se almacenará la staticVariable
, se almacena en la instancia del objeto en sí o en otro lugar? Si está almacenado en otro lugar, ¿cómo están conectadas las ubicaciones de memoria?
La memoria para variables estáticas normalmente se mantiene en algún objeto rooteado (y oculto) object[]
. Esto se puede ver haciendo un! Gcroot en el objeto en WinDbg (con SOS).
Solo para agregar, estas referencias nunca pueden ser GC (a menos que anules el campo), como descubrí recientemente.
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.