#include <stdint.h>
#include <stdio.h>
typedef union {
uint64_t u[2];
struct {
uint64_t a:30;
uint64_t b:30;
uint64_t c:30;
uint64_t d:30;
uint64_t e:8;
}x;
} mystruct;
int main()
{
printf("Size %d\n", sizeof(mystruct));
}
64ビットマシンでコンパイルしようとしています。予想される出力は16でしたが、私は24になっています。 ここで何らかの整列が行われていますが、構造体xが正確に16バイトである理由はわかりません。 誰かがこれを説明できますか? C規格から感謝サイズが期待された出力を示していません
:ビットフィールドの実装はコンパイラに依存しているという事実のほかに
は、すべてのビットフィールドの構造は、実際にメモリ内に次のように保存されている可能性があります*」ビットフィールドについてのほとんどは、実装に依存します。個人的に私は「ほとんど」を省いたでしょう。 – cdarke@cdark残りは指定されていないので*ほとんど* – ouah