对齐规则
- 01 结构体的第一位从0开始偏移,偏移该数据类型大小和对齐模数比取小的值的整数倍,0是所有类型的整数倍,所以第一个数从0开始偏移,对齐模数比可以用#pragma pack(show)查看当前编译器的对齐模数比。
- 02 最后该结构体的大小取该结构体的最大数据类型的大小和对齐模数比取小的值的整数倍,比如一个结构体的最大数据类型是int(4字节),对齐模数比为8,计算出来的偏移量是23则根据4字节的整数倍来偏移,这个结构体的真正大小就是24.
- 03 如果是结构体嵌套结构体的对齐规则是取该嵌套结构体中最大数据类型的整数倍来进行偏移而不是根据该结构体的大小进行整数倍的偏移
- 下面是代码的例子:
#include<stdio.h>
struct Person
{
int a;
char b;
double c;
float d;
};
int main()
{
printf("sizeof(Person) = %d\n", sizeof(Person));
return 0;
}
结构体嵌套结构体
#include<stdio.h>
struct Person
{
int a;
char b;
double c;
float d;
};
struct A
{
int a;
char b;
Person p;
double c;
};
int main()
{
printf("sizeof(A) = %d\n", sizeof(A));
return 0;
}