¿Por qué el tamaño de mi sindicato es más grande de lo que esperaba?

Cuando imprimo el tamaño de una unión como esta:

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;
}

Recibo una respuesta de 8 usando 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));

obtuve 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]

Respuestas a la pregunta(5)

Su respuesta a la pregunta