分类:
2010-12-22 11:07:20
1)结构体变量的首地址能够被其最宽基本类型成员的大小所整除;
2)结构体每个成员相对于结构体首地址的偏移量(offset)都是成员大小的整数倍,如有需要编译器会在成员之间加上填充字节(internal adding);
3)结构体的总大小为结构体最宽基本类型成员大小的整数倍,如有需要编译器会在最末一个成员之后加上填充字节(trailing padding)。
struct B {
int a; //对其系数4
char b; //对其系数1
short c; //对其系数2
};//整体对其系数4
sizeof(strcut B)=8
struct C {
char b; //对其系数1 0~3
int a; //对其系数4 4~7
short c; //对其系数2 8~9
};//整体对其系数4
sizeof(struct C)=12 本应该是10为了规则3,所以补2字节
#progma pack (2)
struct D {
char b; //对其系数min(长度=1,n=2)=1
int a; //对其系数min(长度=4,n=2)=2
short c; //对其系数min(长度=2,n=2)=2
};//整体对其系数2
#progma pack (2) 对int a的放置产生影响, #progma pack (n) 只能取1、2、4 因此 sizeof(struct D)=8