Gestión de memoria para una clase [cerrado
-
27-09-2019 - |
Pregunta
En el siguiente código, cómo, en términos de gestión de memoria, es class A
Asignado y desaconsejado en .NET (C#).
class A
{
public static m1(int x, int y)
{
int x, y;
return x+y;
}
int m2(int p, int q)
{
int p, int q;
return p+q;
}
int x=10;
int y;
const int x=10;
readOnly y=20;
public int x
{
get {y}
set {y=value}
}
}
class B
{
A a=new A(); // what happens when initializing class A;
}
Nota: que el uso de class B
podría ser el punto de entrada del programa o una instancia de objeto, pero el alcance aquí está en la gestión de la memoria y la asignación de la instancia de class A
.
Solución
La línea que describe asigna una sola instancia de A
en el montón cuando crea una nueva instancia de B
. Asi que,
B b = new B();
asignará dos objetos: uno B
con la llamada directa y una A
Como parte de la construcción del B
.
La línea en sí misma nada Hasta que cree una instancia de B
.
A
parece tener tres campos que no son campos de referencia, por lo que no crea nuevos objetos en el montón, sino que son parte del A
instancia.
Eso es más o menos toda la memoria que se asigna en este ejemplo.
EDITAR:
Para fines de mayor claridad: un enlace de referencia a un artículo que explica la pila y el montón, y las consideraciones de asignación de memoria:http://www.simple-talk.com/dotnet/.netframework/.net-memory-management-basics/
Otros consejos
Cuando crea una instancia de B, la memoria se asigna para 1 objeto con un campo de referencia ("A"). Justo después de que se cree esa nueva instancia de A que causa la asignación de memoria para el objeto con dos "int" campos ("x", "y") y con un campo de El tipo es desconocido escribe.