结构体对齐规则:
1、第一个成员在于结构体变量偏移量为0的地址处。
2、其他成员变量要对齐到某个数字(对齐数)的整数倍的地址处。
对齐数 = 编译器默认的一个对齐数 与 该成员大小的 较小值。
3、结构体总大小为最大对齐数(每个成员变量都有自己的对齐数)的整数倍。
4、针对嵌套结构体,嵌套的结构体要对齐到自己最大对齐数的整数倍处,结构体总体大小是所有对齐数的最大值(包含嵌套结构体的对齐数)的整数倍。
下面,来看一个考察结构体对齐方式的面试题:
1、已知结构体成员d的地址为p1,请获取成员变量b的地址。
struct data{
int a;
char b;
short c;
short d;
int e;
};
思路:
根据结构体对齐规则分析,结构体在内存中的分布情况如下图所示:
故 将指针p1向上移动4个单位即可。即p1-4 * sizeof(p1)
有问题的地方还请指正,十分感谢!