Gerenciamento de memória para uma classe [fechada
-
27-09-2019 - |
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
.
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.