struct struct_name {
char a;
char b;
char c;
}
结构struct_name的大小为3但
struct struct_name1 {
char a;
char b;
char c;
int d;
char e;
char f;
char g;
};
struct_name1的大小是12为什么? 我知道这是因为填充,但为什么结构stuct_name的大小是3,为什么sizeof结构struct_name1不是11。
答案 0 :(得分:1)
这一切都取决于平台,但假设一个相对正常的环境,32位int
s需要在32位边界上对齐,则需要该结构为4字节大小的倍数。否则,如果您尝试创建struct_name1
数组,则中间的int
将无法正确对齐(数组中的元素之间不能填充)。
如果编译器将该结构设置为11,则其中两个的数组将如下所示:
abcXddddefgabcXddddefg // X is padding
0 4 8 C F // hex offset
您会看到第二个int d
的第一个字节位于偏移量0x0F,该值为15,而不是4字节对齐。因此添加了额外的填充字符:
abcXddddefgXabcXddddefgX // X is padding
0 4 8 C 0 4 // hex offset
并且中间int
将始终具有正确的对齐方式。