我有一个定义如下的结构数组:
struct {
int x;
char y;
} arr[10];
我机器上 int 的大小是 4 个字节,一个 char 是 1 个字节。我知道结构将在内部填充,即数组的每个元素的大小为 8 个字节。但我想知道是否
1) 这是因为 int 类型成员在下一个数组元素中的对齐要求或
2)是因为每个结构本身应该在8字节边界上对齐,因为结构类型变量需要自然对齐。
为了让我的观点更清楚,数组第一个成员的起始地址应该是什么?如果它是第二种情况中指出的 8 字节对齐地址,则在定义大型二维数组时可能会出现问题,例如:
int arr[1000][1000];
这里二维数组的每个元素(即每个一维数组)都应该在 4000 字节的边界上对齐。机器可能没有内存孔来满足此内存要求。