struct x
{
char b;
short s;
char bb;
};
int main()
{
printf("%d",sizeof(struct x));
}
输出为:6
我在32位编译器上运行此代码。输出应该是8个字节。
我的解释 - > 1. Char需要1个字节,下一个short需要2的倍数,所以short创建1的填充并占用2个字节,这里已经分配了4个字节。现在唯一的左边的char成员需要1个字节但是因为内存分配是4的倍数所以总内存给出的是8个字节。
结构的对齐要求是具有最大对齐的成员的对齐要求。这里的最大对齐是short
,所以可能是2
。因此,两个为b
,两个为s
,两个为bb
给出6。
C结构内存布局完全是特定于实现的,您不能假设所有这些。
此外,在C结构的典型对齐中,这样的结构:
struct MyData
{
short Data1;
short Data2;
short Data3;
};
sizeof = 6也是如此,因为如果类型“short”存储在两个字节的存储器中,那么上面描述的数据结构的每个成员将是2字节对齐的。 Data1将位于偏移0,Data2位于偏移2处,Data3位于偏移4.此结构的大小为6个字节。