en principio:
1. El tipo de clase de C++ es un tipo de valor, lo que significa que cuando se crea una instancia de un objeto de clase, se asigna memoria en la pila.
De esta manera, si el tipo de clase se define así
clase A
{
público:
ent i;
Una una;
}
Caerá en un bucle infinito, porque al crear una instancia de un objeto de A, A necesita calcular el espacio de memoria ocupado por dicho objeto en función del tipo de miembro (los miembros de datos se determinan en función del tipo y el código del miembro). La función se almacena en el exe. Para asignar a la memoria, simplemente use un puntero para señalar la dirección de la memoria y agregue información de descripción de clase, pero sizeof no muestra el uso de memoria de esta parte de la información de descripción. a de su propio tipo, calcula los datos utilizados por a. Espacio de memoria, y a es de tipo A, así que repita.
Entonces en C++
Puede contener punteros de su propio tipo (usados a menudo en listas enlazadas)
clase A
{
público:
ent i;
A*pa;
}
El espacio de memoria ocupado por una variable de puntero es fácil de determinar. El número de palabras de máquina de longitud indica cuánto espacio ocupa la variable de puntero.
2. El tipo de clase en C# es un tipo de referencia, que es esencialmente un puntero.
Por lo tanto, todos los objetos de clase en C# tienen 4 bytes (máquina de 32 bits) y contienen una dirección de memoria que apunta al espacio de memoria del montón.
clase A
{
público int i;
público A a;
}
Un objeto = nuevo A();
El objeto en sí ocupa 4 bytes de memoria y almacena la dirección de la memoria del montón. El tamaño de esta memoria es de 8 bytes (int 4 bytes, a también tiene cuatro bytes). Cuando se crea una instancia del miembro a, el contenido de a no es nulo. almacena otra dirección en la memoria del montón, apuntando a un espacio de memoria de 8 bytes.
Como podemos determinar cuánto espacio de memoria ocupa un objeto de A (4 bytes, todos los objetos de clase C# ocupan 4 bytes, en una máquina de 32 bits), podemos definir
-