四个重要的基本概念。
1.数据类型自身的对齐值:对于char型数据,其自身对齐值为1,对于short型为2,对于int,float,其自身对齐值为4,double为8单位字节。
2.结构体或者类的自身对齐值:其成员中自身对齐值最大的那个值。
3.指定对齐值:#pragma pack (value)时的指定对齐值value。
4.数据成员、结构体和类的有效对齐值:自身对齐值和指定对齐值中小的那个值。
#pragma pack (1)
typedef struct aa
{
char a;
int b;
}a;
#pragma pack ()
void function()
{
a s;
s.a = 1;
s.b = 2;
printf("%d",sizeof(s));
}
//这里字节对齐长度为1,所以调试结构的长度为5
#pragma pack (4)
typedef struct aa
{
char a;
int b;
}a;
#pragma pack ()
void function()
{
a s;
s.a = 1;
s.b = 2;
printf("%d",sizeof(s));
}
//这里字节对齐长度为4, char a 是一个字节,所以对齐字节后长度为4,调试结构的长度为8
struct s1
{
char a;
int b;
};
struct s2
{
char c;
s1 s;
char d;
double e;
};
//s2的长度会是多少呢?
void function()
{
s2 a;
printf("%d",sizeof(a));
};
//得出的结果为24字节.这里字节对齐长度为8,但是前面的相加宽度刚好是8的整数倍(char填充到4字节),所以c 4字节.a4字节,b4字节,d4字节,e8字节,一起就是24个字节