结构为,
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]
size = 9 bytes
但是根据解决方案,S1的大小应该是10字节
这里的答案是结构体的布局完全取决于编译器。
10可能是该结构最常见的大小。
填充的原因是,如果有一个数组,它将保持所有成员正确对齐。如果size为9,则其他数组元素的结构体成员都不对齐。
在某些系统上不允许未对齐的did访问。在大多数系统上,它们会导致处理器使用额外的周期来访问数据。
编译器可以为这样的结构中的每个元素分配4个字节。
C标准规定(对不起,不是在我的计算机上,所以没有引号):结构体与最大的(基类型)成员对齐。最大的成员字段很短,只有2个字节,所以第一个元素'a'在偶数地址对齐。'a'占用1字节。'b'必须在偶数地址再次对齐,因此浪费了一个字节。结构体'e'的最后一个元素也是一个字节,它后面的字节可能会被浪费,但这并不一定要显示在结构体的大小中。如果把'a'放在末尾,即重新排列成员,你可能会发现你的结构体的大小是8字节…这是最好的。