Sono curioso sull'allineamento dei tipi uint32_t su piattaforme a 64 bit. La specifica dice che uint32_t dovrebbe essere esattamente il bitwidth dato, che in effetti sembra essere:allineamento uint32_t su 64-bit?
> printf("sizeof(uint32_t): %zd\n", sizeof(uint32_t));
sizeof(uint32_t): 4
Ma poi ho una struct:
typedef struct A {
uint32_t a;
uint32_t b;
} A;
Ma, a sorpresa:
> printf("sizeof(A): %zd\n", sizeof(A));
sizeof(A): 16
È uint32_t che è allineato a 8 byte per qualche motivo? È davvero un tipo da 8 byte sotto?
Che cos'è il compilatore e qual è l'architettura? – ouah
gcc 4.4.5 su x86-64 –
Si noti che a causa del modo in cui funzionano gli array, il requisito di allineamento di 'uint32_t' * deve * essere minore o uguale a' sizeof (uint32_t) '. A causa del requisito che non ci sia riempimento nei tipi 'uintN_t',' sizeof (uint32_t) * CHAR_BIT == 32'. Qualsiasi altra cosa non è conforme a C99. Tuttavia, l'allineamento della tua 'struct A' è permesso da C99 per essere il più grande allineamento di qualsiasi membro. –