私は、64ビットプラットフォーム上のuint32_tタイプのアライメントについて興味があります。 64ビットでuint32_tアラインメント?
> printf("sizeof(uint32_t): %zd\n", sizeof(uint32_t));
sizeof(uint32_t): 4
しかし、私は、構造体を持っている::仕様は確かにそれがあるように思われ、のuint32_tは正確に与えられたビット幅であることを述べている
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
gcc 4.4.5 on x86-64 –
配列の動作のために、 'uint32_t' *のアライメント要件は' sizeof(uint32_t) '以下でなければなりません。 'uintN_t'型では、' sizeof(uint32_t)* CHAR_BIT == 32'のようにパディングがないという要件があるためです。それ以外はC99に準拠していません。しかし、 'struct A'のアライメントは、C99によってどのメンバの最大アラインメントよりも大きくなることが許されています。 –