【发布时间】:2013-06-12 18:13:18
【问题描述】:
我有一个结构数组,定义如下:
struct {
int x;
char y;
} arr[10];
我机器上 int 的大小是 4 个字节,一个 char 是 1 个字节。我知道结构将在内部填充,即数组的每个元素的大小为 8 个字节。但我想知道是否
1) 这是因为int型成员在下一个数组元素中的对齐要求或
2) 是不是因为结构类型变量需要自然对齐,所以每个结构本身都应该在 8 字节边界上对齐。
为了让我的观点更清楚,数组第一个成员的起始地址应该是什么? 如果它是第二种情况中指出的 8 字节对齐地址,则在定义大型二维数组时可能会出现问题,例如:
int arr[1000][1000];
这里二维数组的每个元素(即每个一维数组)都应该在 4000 字节的边界上对齐。机器可能没有内存孔来满足此内存要求。
【问题讨论】:
-
哪种编程语言?
-
它的 C。另外,如果我在单独定义的结构的单个实例(不是结构数组的元素)上应用 sizeof,我得到 8 个字节作为答案,而不是 5 个字节。为什么会这样?即使在单个实例的情况下,当实例占用内存后内存空闲时,编译器是否也会填充?
标签: c arrays memory alignment structure