Como otros han dicho, estructuras están acolchadas para las alineaciones, y como relleno no solo depende del tipo de los miembros, sino también en el orden de los miembros en el que están definidas.
Por ejemplo, considere estas dos estructuras A
y B
como se define a continuación. Ambas estructuras son idénticas en términos de miembros y tipos; la única diferencia es que el orden en el que se definen los miembros no es la misma:
struct A
{
int i;
int j;
char c;
char d;
};
struct B
{
int i;
char c;
int j;
char d;
};
estaría el sizeof(A)
ser igual a sizeof(B)
simplemente porque no tienen igual número de miembros del mismo tipo? Nº Intente imprimir el tamaño de cada uno:
cout << "sizeof(A) = "<< sizeof(A) << endl;
cout << "sizeof(B) = "<< sizeof(B) << endl;
Salida:
sizeof(A) = 12
sizeof(B) = 16
Sorprendido? Vea la salida usted mismo: http://ideone.com/yCX4S
@sth: ¿Cuál era el sentido de esas ediciones? – eriktous
@eriktous: Me gustó la pregunta e intenté aumentar la relación señal/ruido eliminando el texto que no agregaba nada a la pregunta. – sth