em princípio:
1. O tipo de classe C++ é um tipo de valor, o que significa que quando um objeto de classe é instanciado, a memória é alocada na pilha.
Desta forma, se o tipo de classe for definido assim
classe A
{
público:
int eu;
Uma;
}
Ele cairá em um loop infinito, porque ao instanciar um objeto de A, A precisa calcular o espaço de memória ocupado por tal objeto com base no tipo de membro (os membros de dados são determinados com base no tipo e no código do membro A função é armazenada no exe Para mapear para a memória, basta usar um ponteiro para apontar para o endereço da memória e adicionar algumas informações de descrição da classe, mas sizeof não exibe o uso de memória desta parte das informações de descrição ao encontrar um objeto). a de seu próprio tipo, ele calcula os dados usados por a, e a é do tipo A, então repita.
Então, em C++
Pode conter ponteiros de seu próprio tipo (frequentemente usados em listas vinculadas)
classe A
{
público:
int eu;
A*pa;
}
O espaço de memória ocupado por uma variável de ponteiro é fácil de determinar. O número de palavras de máquina indica quanto espaço a variável de ponteiro ocupa.
2. O tipo de classe em C# é um tipo de referência, que é essencialmente um ponteiro.
Portanto, todos os objetos de classe em C# têm 4 bytes (máquina de 32 bits) e contêm um endereço de memória, que aponta para o espaço de memória heap.
classe A
{
público int i;
público A a;
}
Um objeto = new A();
O próprio objeto ocupa 4 bytes de memória e armazena o endereço da memória heap. O tamanho dessa memória é de 8 bytes (int 4 bytes, a também é quatro bytes). Quando o membro a é instanciado, o conteúdo de a não é nulo. armazena outro endereço na memória heap, apontando para um espaço de memória de 8 bytes.
Como podemos determinar quanto espaço de memória um objeto de A ocupa (4 bytes, todos os objetos da classe C# ocupam 4 bytes, em uma máquina de 32 bits), podemos definir
-