两个原则:
1、一个自动变量,多数在栈上,起始地址默认要求是其自身大小的整数倍。
即 char c; c的地址可以任意。
int a; a的地址必须是sizeof(int)的整数倍。
2、一个结构体的大小,必须是其内部成员size的最大公倍数。
以代码为例,看看发生了什么。
struct align_what{ char a; //申请一个a,char 任意位置 char c; //c直接紧挨着a即可 void *d; // void* 64位机器上是8,所以从c后面偏移了6 char f; // d后面紧跟着即可 };
sizeof(align_what) == ?
答案是8。