标题结构体大小计算:
//结构体成员偏移量必须是成员大小的整数倍
//结构体的大小必须是成员大小的整数倍(数组,结构体除外)
//虽然浪费空间,但按照计算机的访问规则,这种对齐方式,提高了效率
struct s1
{
char a; //1 +3 {} {}{}{} {}{}{}{}
int b;//4
float c;//4
double d;//8``
};
```c
//#pragma pack(4) //指定向4对齐,而不是8
struct s11
{
char a; //1 +3 {} {}{}{} {}{}{}{}
int b;//4
float c;//4
double d;//8
};`
#pragma pack(10) //指定向10对齐 当指定大小大于成员变量大小时,还按最大的成员变量大小的整数倍计算
struct s111
{
char a; //1 +3 {} {}{}{} {}{}{}{}
int b;//4
float c;//4
double d;//8
};
`struct s2
{
char a; //1 +3 {} {}{}{} {}{}{}{}
int b;//4
float c;//4
int d[10];//40
};
struct s3
{
char a;//1 +3
float b;//4
struct s4//24
{
double c;
char d[20];
};
};
struct s5
{
char a;//1 +3
float b;//4
struct s6 // 32
{
double c;//8 +2
char d[20];//20
}temp;
};
int main()
{
printf("s1:%d\n",sizeof(struct s1));
printf("s11:%d\n",sizeof(struct s11));
printf("s111:%d\n",sizeof(struct s111));
printf("s2:%d\n",sizeof(struct s2));
printf("s3:%d\n",sizeof(struct s3));
printf("s5:%d\n",sizeof(struct s5));
system("pause");
return 0;
}