各成员变量存放的起始地址相对于结构的起始地址的偏移量必须为该变量的类型所占用的字节数的倍数, 各成员变量在存放的时候根据在结构中出现的顺序依次申请空间 同时按照上面的对齐方式调整位置。 空缺的字节自动填充, 同时为了确保结构的大小为结构的字节边界数(即该结构中占用最大的空间的类型的字节数)的倍数,因此在为最后一个成员变量申请空间后 还会根据须要自动填充空缺的字节;ios
#include <iostream> using namespace std; #pragma pack(8) struct Test1 { char a; //0 - 1 short b;//2 - 3 int c;// 4 - 7 float d;//8 - 11 double e;//12 - 23 }; #pragma pack(4) struct Test2 { char a; //0 - 1 short b;//2 - 3 int c;// 4 - 7 float d;//8 - 11 double e;//12 - 19 }; #pragma pack(8) struct Test3 { double e;//0-7 float d;//8-13 short b;//14-15 int c;// 16-19 char a; //20-23 }; int main() { std::cout << "size test1= " << sizeof(Test1) << std::endl; std::cout << "size test2= " << sizeof(Test2) << std::endl; std::cout << "size test3= " << sizeof(Test3) << std::endl; return 0; }