只需改变类成员的声明顺序就可以改变这个类的大小:
struct A{ bool a; int b; bool c;}; /*sizeof (A) == 12*/
在我的机器上,sizeof (A) 等于12。结果看起来非常的出乎意料,因为A的成员大小之和仅仅是6个字节,多余的6个字节来自何方呢?编译器在每个bool类型成员的后面插入了各插入三个填充字节,使得它四字节边界对齐。你可以按照下面的方式重新组织数据成员减少A的大小:
struct B{ bool a; bool c; int b;}; // sizeof (B) == 8
这次编译器只是在成员c的后面插入两个填充字节。因为b占4字节,它自然就word边界对齐,而不需要额外的填充字节。
copyright:2016-2020|邮箱:imalib@vip.163.com
蜀ICP备16020986号