InicioApuntes Y Monografias[C++] Alineamiento de memoria en structs/clases
Que tul? En este post voy a mostrar la diferencia entre dos porciones de codigo. El ejemplo es sencillo para mostrar una perdida de espacio en algo que puede parecer minimo.

A primera vista son estructuras identicas.



struct test{
    short int a;
    double b;
    int c;

};



struct test{
    double b;
    int c;
    short int a;
};





Sin embargo, al analizar el tamaño de un arreglo de esta estructura (de tamaño 10000), se ve que son dos distintos. Hay una diferencia de 80.000 bytes de tamaño.


Primer código



Segundo código.







Explicación


La razón es que el campo de tipo double impone un alineamiento de memoria tal que la dirección donde está ese dato sea divisible por 8. Sin embargo, los otros tipos de datos tienen distinto alineamiento (8 bytes para double, 4 bytes para int, 2 bytes para short int). Si comentamos los codigos:



struct test{
    short int a; //2 bytes
    //6 bytes no usados para alinear el double
    double b; //8 bytes
    int c; //4 bytes
    //4 bytes no usados

}; //tamaño de 24 bytes



struct test{
    double b; //8 bytes, no debo alinear
    int c; //4 bytes, no debo alinear
    short int a; //2bytes
   //2 bytes, completo los 8 bytes. Podría definir otro short int sin costo adicional.
}; //tamaño de 16 bytes




Esto ocurre tambien en atributos de una clase.

Gracias por pasar. Fijate mis otros post de codigo memoria :



Datos archivados del Taringa! original
116puntos
286visitas
0comentarios
Actividad nueva en Posteamelo
0puntos
4visitas
0comentarios
Dar puntos:

Dejá tu comentario

0/2000

Autor del Post

M
MPucheta🇦🇷
Usuario
Puntos0
Posts16
Ver perfil →
PosteameloArchivo Histórico de Taringa! (2004-2017). Preservando la inteligencia colectiva de la internet hispanohablante.

CONTACTO

18 de Septiembre 455, Casilla 52

Chillán, Región de Ñuble, Chile

Solo correo postal

© 2026 Posteamelo.com. No afiliado con Taringa! ni sus sucesores.

Contenido preservado con fines históricos y culturales.