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.

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top