uint32_t对齐64位?

时间:2012-03-28 14:44:00

标签: c 64-bit alignment

我很好奇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字节的类型吗?

2 个答案:

答案 0 :(得分:6)

它完全取决于您的编译器和体系结构。在您的情况下,看起来字段确实是8字节对齐,可能是出于性能原因。

答案 1 :(得分:2)

我的猜测是,默认情况下,64位架构上的所有内容都将与64位边界对齐,与32位架构相同,所有内容都与4个字节对齐。您可以指定打包pragma指令以摆脱填充。 例如

#pragma pack(0)

在gcc。