我很好奇64位平台上uint32_t类型的对齐方式。规范说uint32_t应该是给定的位宽,实际上它似乎是:
> 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字节的类型吗?
答案 0 :(得分:6)
它完全取决于您的编译器和体系结构。在您的情况下,看起来字段确实是8字节对齐,可能是出于性能原因。
答案 1 :(得分:2)
我的猜测是,默认情况下,64位架构上的所有内容都将与64位边界对齐,与32位架构相同,所有内容都与4个字节对齐。您可以指定打包pragma指令以摆脱填充。 例如
#pragma pack(0)
在gcc。