一部の本ではイエスと言っていますが、次のコードはそうではないことを示しています
union
{
int n;
char array[5];
} u;
printf("%d %d %d", sizeof(u.n), sizeof(u.array), sizeof(u));
あなたの意見は何ですか?
共用体のサイズは、次の 2 つの要件を満たす必要があります。
後者の規則は、配列が機能するために必要です。メモリに次々に配置された場合、共用体を適切に整列させます。
したがって、最大の要素が 5 バイトであるが、一部の要素が 4 バイトのアラインメントを必要とする場合、共用体のサイズは 5 バイト以上の 4 バイトの倍数でなければなりません。8 バイトでこれを満たします。
ほとんどの C 実装では、これら 2 つの規則に従う最小サイズを使用します。
コンパイラは通常、アライメント要件に基づいてサイズを決定します。あなたの場合、最大のメンバーのサイズは5で、整列すると8になります。これは、このユニオン型の配列を宣言する可能性があるため必要です。