パディングとそのルール、必要な理由などを認識しています。
私の質問には構造が与えられ、
struct my_struct {
int a;
char c;
};
この場合、c の開始アドレスはワード アラインですが、コンパイラは 3 バイト (ワード サイズとして 4 を想定) のパディングを追加します。cの後に要素がなく、なぜこれらの3バイトが必要なのですか? 以下を確認したところ、
int g_int1;
struct my_struct st;
int g_int2;
上記で私が言いたいのは、残りの変数宣言は、前の変数サイズの単語の整列度に依存していないということです。コンパイラは、グローバルまたはローカルの自動変数に関係なく、常に次の変数を整列しようとします。
これはcharであり、1バイトでは問題にならないため、エンディアンネスの理由はわかりません。私が思う理由は、最後の要素の条件コンパイラをチェックする代わりに、必要に応じて常にパディングを追加することです。
正当な理由は何ですか?