自然对界:一个变量的内存地址正好位于它长度的整数倍
有关结构的字符对齐方式:
结构体内的变量按照自然对界对齐,数组如char a[10]的自然对界是1Byte。
结构体按照结构体内最大的自然对界进行对齐
例子:
struct test{
int g;
char w[10];
double l;
char gwl;
};
int _tmain(int argc, _TCHAR* argv[])
{
printf("%d",sizeof(struct test));
getchar();
return 0;
}运行结果:32
32 = 4+10+(2+8)+1+7
有关union的字符对齐方式:
按照union内成员最大的自然对界进行对齐
整个union大小为占空间最大的成员按上述对齐方式对齐后的大小
例子:
union test{
int g;
char w[10];
double l;
char gwl;
};
int _tmain(int argc, _TCHAR* argv[])
{
printf("%d",sizeof(union test));
getchar();
return 0;
}运行结果:16
按照double的自然对界进行对齐,union的大小为成员char w[10]的大小
关于自己定义字符对齐方式
#pragma pack(n)
.
.代码
.
#pragma pack()//取消自定义对齐方式结构体中成员对齐方式为n与自然对界中较小的(union相同,最后取成员中最大的对齐方式)
例子:
#pragma pack(2)
struct test{
int g;
char w[10];
double l;
char gwl;
};
int _tmain(int argc, _TCHAR* argv[])
{
printf("%d",sizeof(struct test));
getchar();
return 0;
}
#pragma pack()运行结果:24
24 = 4+10+8+1+1