我很好奇64位平臺上的uint32_t類型的對齊情況。該規範指出,uint32_t的應該是完全給出位寬,這的確好像是:uint32_t對齊64位?
> printf("sizeof(uint32_t): %zd\n", sizeof(uint32_t));
sizeof(uint32_t): 4
但後來我有一個結構:
typedef struct A {
uint32_t a;
uint32_t b;
} A;
但是,令人驚奇:
> printf("sizeof(A): %zd\n", sizeof(A));
sizeof(A): 16
由於某種原因,uint32_t是否是8字節對齊的?它真的是一個8字節的類型嗎?
什麼是編譯器和什麼是體系結構? – ouah 2012-03-28 14:53:02
gcc 4.4.5在x86-64上 – 2012-03-28 15:02:51
請注意,由於數組的工作方式,uint32_t *的對齊要求必須小於或等於sizeof(uint32_t)'。由於'uintN_t'類型中沒有填充的要求,所以'sizeof(uint32_t)* CHAR_BIT == 32'。其他任何東西都不符合C99。但是,C99允許你的'struct A'對齊成爲任何成員的最大對齊。 – 2012-03-28 15:15:40