结构是,
struct {
char a;
short b;
short c;
short d;
char e;
} s1;
short的大小以2个字节给出 char的大小为1个字节 它是一个32位的LITTLE ENDIAN处理器
据我所知,答案应该是:
1000 a[0]
1001 offset
1002 b[0]
1003 b[1]
1004 c[0]
1005 c[1]
1006 d[0]
1007 d[1]
1008 e[0]
S1的大小= 9字节
但是根据解决方案,S1的大小应该是10个字节
答案 0 :(得分:1)
这里的答案是,结构的布局完全取决于编译器。
10可能是这种结构中最常见的尺寸。
填充的原因是,如果有一个数组,它将使所有成员保持正确对齐。如果大小为9,则每个其他数组元素都会有未对齐的结构成员。
在某些系统上不允许进行未对齐的访问。在大多数系统中,它们会导致处理器使用额外的周期来访问数据。
编译器可以为这种结构中的每个元素分配4个字节。
答案 1 :(得分:1)
C标准说(抱歉,不是在我的电脑上,所以没有引用):结构与最大(基本类型)成员的对齐方式对齐。你最大的成员字段是一个短的2字节,所以第一个元素' a'在偶数地址对齐。 '一个'占用1个字节。 ' B'必须在偶数地址处再次对齐,因此浪费了一个字节。结构的最后一个元素' e'也是一个字节,后面的字节很可能被浪费,但这不必显示在结构的大小。如果把' a'到最后,即重新排列成员,你可能会发现你的结构的大小是8个字节......这是最好的。