见下面代码:
#pragma pack(4)
union A
{
char m[7];
short int n;
}a;
struct B
{
char c; //这个下面会改动
union A a;
}b;
void main()
{
printf("%d\n",sizeof(union A));
printf("%d\n",sizeof(struct B));
}
#pragma pack()
最后结果是8,10. 对于8没有疑问,只是一直想不通sizeof(struct B)为何是10。
如果将char c; 改为 short c; 也是这个答案。如果将char c;改为 int c;此时答案就是8,12了。对于后面两个我能理解,就是对于在char c;时为何也是10实在想不明白。这里请高人指点,先谢了!
可以理解首先看union A 里面是 char 这个是可以单字节对齐的但是 short int 这个是 2字节对齐的所以struct 里面必须保持 short int 定义在2字节对齐的位置char 是单字节,后面必须空出来一个字节,才能保持short int2字节对齐特性 所以实际内存分布00----char c01