Pergunta

No código a seguir, como - em termos de gerenciamento de memória - é class A alocado e desalocado no .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 o uso de class B pode ser o ponto de entrada do programa, ou uma instância de objeto, mas o escopo aqui está no gerenciamento de memória e alocação da instância de class A.

Foi útil?

Solução

A linha que você descreve aloca uma única instância de A na pilha quando você cria uma nova instância de B. Então,

B b = new B();

alocarão dois objetos: um B com a chamada direta e uma A como parte da construção do B.

A própria linha faz nada até você criar uma instância de B.

A parece ter três campos que não são campos de referência, por isso não cria novos objetos na pilha, mas fazem parte do A instância.

Essa é aproximadamente toda a memória que é alocada neste exemplo.

EDITAR:

Para fins de maior clareza - um link de referência para um artigo que explica as considerações de pilha e pilha e alocação de memória:http://www.simple-talk.com/dotnet/.net-framework/.net-memory-management-basics/

Outras dicas

Quando você cria uma instância de B, a memória é alocada para 1 objeto com um campo de tipo de referência ("A"). Logo após a nova instância de A é criada, o que causa alocação de memória para objeto com dois campos "int" ("x", "y") e com um campo de Tipo é desconhecido modelo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top