Al imprimir el tamaño de una unión como esta:¿Por qué el tamaño de mi sindicato es más grande de lo que esperaba?
union u {
char c[5];
int i;
} un;
usando esto:
int _tmain(int argc, _TCHAR* argv[])
{
printf("size of union = %d ",sizeof(un));
return 0;
}
consigo una respuesta de 8 utilizando Visual C++, pero esperaba 5. ¿Por qué?
Bueno, para el mismo ejemplo, hice algo como esto:
int i1 = 0x98761234;
un.i = i1;
printf("\n un.c[0] = %x ",un.c[0]);
printf("\n un.c[1] = %x ",un.c[1]);
printf("\n un.c[2]= %x ",un.c[2]);
printf("\n un.c[3] = %x ",un.c[3]);
printf("\n un.c[4] = %x ",un.c[4]);
printf("size of union = %d ",sizeof(un));
que me dieron resultados como
un.c[0] = 34;
un.c[1] = 12;
un.c[2] = 76;
un.c[3] = ffffff98;
¿Por qué hay 6FS en un.c [3]
Suponiendo enteros de 4 bytes, el miembro más grande es c, que es de 5 bytes. El compilador redondea esto hasta 8 agregando relleno. Si el sistema usa enteros de 8 bytes, entonces 8 se usa para el tamaño de la unión. –
@Brian Cambié mi respuesta poco antes de que comenzaras a "tipo de miembro más grande", para indicar más claramente un int. –
No sé, todavía no creo que tu respuesta sea clara o correcta. Usted dice que el miembro más grande es un int, pero no lo es. Es una matriz de 5 caracteres. Desde 5> 4 se redondea al siguiente múltiplo del tamaño de palabra nativo, lo que hace que sea 8. –