uint32_t对齐64位?

gct*_*gct 6 c 64-bit alignment

我对64位平台上uint32_t类型的对齐感到好奇.规范说uint32_t应该是给定的位宽,实际上它似乎是:

> printf("sizeof(uint32_t): %zd\n", sizeof(uint32_t));   
sizeof(uint32_t): 4
Run Code Online (Sandbox Code Playgroud)

但后来我有一个结构:

typedef struct A {
    uint32_t a;
    uint32_t b;
} A;
Run Code Online (Sandbox Code Playgroud)

但是,令人惊讶的是:

> printf("sizeof(A): %zd\n", sizeof(A));
sizeof(A): 16
Run Code Online (Sandbox Code Playgroud)

由于某种原因,uint32_t是否为8字节对齐?下面真的是一个8字节的类型吗?

Gra*_*and 6

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