1:有如下代码:
#include <iostream.h> #pragma pack(1) struct test{ char c; short s1; short s2; int i; }; int mian() { cout<<sizeof(test)<<endl; return 0; }
代码第3行用#pragma pack将对其设为1.由于结构体test中的成员s1、s2和i的自身对齐分别为2、2和4,都小于1.因此它们都是用1作为对齐,sizeof(test)=1+2+2+4=9.
如果注释掉第3行,则编译器默认对齐为8.所以各个成员自身的对齐都小于8,因此它们使用自身的对齐,sizeof(test)=1+1(补齐)+2+2+2(补齐)+4=12.