读书人

求教大家一个联合体所占字节大小的有关

发布时间: 2012-04-07 17:31:50 作者: rapoo

求教大家一个联合体所占字节大小的问题。
union student
{
char name[20];
double al;
char sex;
int age;
float height;

}stu;

声明了一个这样的联合体,如果把第二行double变量注释掉。sizeof(stu)。是20.联合体的大小就是占最大字节的那个大小。。

可是为什么加了double变量之后。sizeof(stu)就变成了24了?是VC6.0运行的。32位机器。。

求高手给出详细的解释。。

[解决办法]
因为字节对齐的原因吧,20不是8(double所占用字节数)的整数倍,24是大于二十的最小的8的整数倍。
[解决办法]
又做了一些试验,证实了VS的对齐原则:

union的对齐原则就是使得对齐尺寸要求最大的数据类型得以满足。

char类型的对齐要求最小,只要1字节。
short的要2字节,int和float4字节,double最大需要8字节。

所以,当union里没有double时,LZ的union只需要满足int和float的要求,用4字节对齐。而添加了double后则更改为8字节对齐。
[解决办法]
sizeof(double) = 8bytes,因此这个联合体按8bytes对齐(按单个数据类型的最大者)。很显然就是24bytes了。这个东西在不同的编译器上可能会有不同的结果,比如用gcc去试试,结果又可能就是20bytes,我手头没有gcc编译器,有的朋友不妨试试。

读书人网 >C语言

热点推荐