两个原则:

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。

  

posted on 2019-11-14 17:19  newbird2017  阅读(203)  评论(0编辑  收藏  举报