分类: WINDOWS
2010-05-17 15:17:06
对齐规则:
char 在字节边界上对齐 N=1
short (16-bit) 在双字节边界上对齐 N=2
int (32-bit) 在4字节边界上对齐 N=4
long (32-bit) 在4字节边界上对齐 N=4
float 在4字节边界上对齐 N=4
double 在8字节边界上对齐 N=8
注: 在结构体中 N 取最大值
如: struct {char a; char b;} T;
struct {char a; int b;} T1;
sizeof(T) == 2; N = 1 没有填充
sizeof(T1) == 8; N = 4 中间填充了3字节
对齐方式影响结构体成员在结构体中的偏移设编译器设定的最大对齐字节边界数为n,对于结构体中的某一成员item,它相对于结构首地址的实际字节对齐数目X应该满足以下规则:
X = min(n, sizeof(item))
例如,对于结构体 struct {char a; int b} T;
当位于32位系统,n=8时:
a的偏移为0,
b的偏移为4,中间填充了3个字节, b的X为4;
当位于32位系统,n=2时:
a的偏移为0,
b的偏移为2,中间填充了1个字节,b的X为2;
另外,多个成员加在一起,字节数还小于N的,要合并一起补齐
如 struct {char a; char b; int i;} t1; N=4 sizeof (t1)==8
有趣的例子:
struct {char a ; int i; char b;} t1;
struct {char a; char b; int i;} t2;
sizeof(t1)==12
sizeof(t2)==8