以下のように定義された構造体の配列があります。
struct {
int x;
char y;
} arr[10];
私のマシンの int のサイズは 4 バイトで、char は 1 バイトです。構造体が内部的にパディングされることはわかっています。つまり、配列の各要素のサイズは 8 バイトになります。しかし、私は知りたいです
1) これは、次の配列要素の int 型メンバーのアラインメント要件のためです。
2)構造体型変数の自然な位置合わせが必要なため、各構造体自体を8バイト境界に位置合わせする必要があるためですか。
私の主張をより明確にするために、配列の最初のメンバーの開始アドレスは何ですか? 2 番目のケースで指摘されているように、8 バイトにアラインされたアドレスである場合、次のような大きな 2 次元配列を定義する際に問題になる可能性があります。
int arr[1000][1000];
ここで、2 次元配列の各要素 (つまり、各 1 次元配列) は 4000 バイト境界に配置する必要があります。マシンには、このメモリ要件を満たすためのメモリ ホールがない場合があります。