#include <iostream>
#pragma pack(1)
struct test {
char c;
short s1;
short s2;
int i;
};
int main()
{
std::cout << sizeof(test) << std::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。