struct x
{
char b;
short s;
char bb;
};
int main()
{
printf("%d",sizeof(struct x));
}
输出是:6
我运行在32位编译器的代码。 输出应为8个字节。
我的解释 - > 1.字符需要1个字节,接下来的短期需要是2的倍数如此之短创造的1填充,并且需要2个字节,这里已分配4个字节。 现在唯一左炭构件需要1个字节但是由于存储器分配在4所以总体存储器倍数给出为8个字节。
struct x
{
char b;
short s;
char bb;
};
int main()
{
printf("%d",sizeof(struct x));
}
输出是:6
我运行在32位编译器的代码。 输出应为8个字节。
我的解释 - > 1.字符需要1个字节,接下来的短期需要是2的倍数如此之短创造的1填充,并且需要2个字节,这里已分配4个字节。 现在唯一左炭构件需要1个字节但是由于存储器分配在4所以总体存储器倍数给出为8个字节。
一个结构的对准的要求是与最大对齐的构件构成。 这里的最大对齐是short
,所以大概2
。 因此,两个用于b
,两个用于s
,两个用于bb
得到6。
在C结构的内存布局完全实现特定的,您不能承担这一切。
另外,在C中的结构这样的结构的典型取向:
struct MyData
{
short Data1;
short Data2;
short Data3;
};
也将具有的sizeof = 6,因为如果类型“短”被存储在存储器的两个字节然后以上描述的数据结构的每个成员将2字节对齐。 DATA1将在偏移0,数据2在偏移2和数据3在偏移4.本结构的大小将是6个字节。
见https://en.wikipedia.org/wiki/Data_structure_alignment