下面举例说明上述规则:
#include #pragma pack(2) //指定PPB为2 struct T { char a; //偏移地址0 int b; //偏移地址2 char c; //偏移地址6 }; #pragma pack() //恢复原来默认PPB,32位下为4 int main(int argc,char * argv[]) { printf("sizeof(struct T)); return 0; }最后输出的结果为:8。语句#pragma pack(2)的作用是指定结构体按2字节对齐,即PPB=2。分析如下:
struct T { char a; //偏移地址0 char b; //偏移地址1 int c; //偏移地址2 };
struct T1 { char a; //偏移地址0 char b; //偏移地址1 int c; //偏移地址4 }; struct T2 { char a; //偏移地址0 int b; //偏移地址4 char c; //偏移地址8 };
structex { int i; char t; int n; };
struc test1 { int i; char t; int n; char add; };那么sizeof(ex1)=16;原因就是在最后一个成员之后填充了3个字节。
原文地址:http://blog.csdn.net/keshacookie/article/details/44525785