Tengo curiosidad acerca de la alineación de los tipos uint32_t en las plataformas de 64 bits. La especificación dice que uint32_t debe ser exactamente el ancho de bits dada, lo que de hecho parece ser:alineación uint32_t en 64 bits?
> printf("sizeof(uint32_t): %zd\n", sizeof(uint32_t));
sizeof(uint32_t): 4
Pero luego tengo una estructura:
typedef struct A {
uint32_t a;
uint32_t b;
} A;
Pero, sorprendentemente:
> printf("sizeof(A): %zd\n", sizeof(A));
sizeof(A): 16
¿Está uint32_t alineado por 8 bytes por alguna razón? ¿Es realmente un tipo de 8 bytes debajo?
¿Qué es el compilador y qué es la arquitectura? – ouah
gcc 4.4.5 en x86-64 –
Tenga en cuenta que debido a la forma en que las matrices funcionan, el requisito de alineación de 'uint32_t' * debe * ser menor o igual que' sizeof (uint32_t) '. Debido al requisito de que no haya relleno en los tipos 'uintN_t',' sizeof (uint32_t) * CHAR_BIT == 32'. Cualquier otra cosa no es conforme a C99. Sin embargo, la alineación de su 'estructura A' está permitida por C99 para ser mayor la alineación más grande de cualquier miembro. –