Tôi tò mò về sự liên kết của các loại uint32_t trên nền tảng 64 bit. Spec nói rằng uint32_t nên chính xác bitwidth nhất định, mà thực sự nó có vẻ là:liên kết uint32_t trên 64 bit?
> printf("sizeof(uint32_t): %zd\n", sizeof(uint32_t));
sizeof(uint32_t): 4
Nhưng sau đó tôi có một cấu trúc:
typedef struct A {
uint32_t a;
uint32_t b;
} A;
Nhưng, đáng ngạc nhiên:
> printf("sizeof(A): %zd\n", sizeof(A));
sizeof(A): 16
Uint32_t có được liên kết 8 byte vì một lý do nào đó không? Nó thực sự là một loại 8-byte bên dưới?
Trình biên dịch là gì và kiến trúc là gì? – ouah
gcc 4.4.5 trên x86-64 –
Lưu ý rằng do cách mảng hoạt động, yêu cầu căn chỉnh của 'uint32_t' * phải * nhỏ hơn hoặc bằng' sizeof (uint32_t) '. Do yêu cầu không có đệm trong các loại 'uintN_t',' sizeof (uint32_t) * CHAR_BIT == 32'. Mọi thứ khác không phù hợp với C99. Tuy nhiên, sự liên kết của 'struct A' của bạn được C99 cho phép là lớn hơn sự liên kết lớn nhất của bất kỳ thành viên nào. –