参加了很多面试,遇到字节对齐的问题不是1次2次,但一直没有彻底弄明白是什么意思,清明节刚好闲下来,彻底研究了一下,得到下面的结论,希望对以后的面试和工作有作用:
第一种结论:
- 首先提出几个概念
①基本类型:像int,char,float,double之类的基本类型
②复合类型:结构体,类,联合体之类的类型,由基本类型构成
③数据类型的宽度: 用sizeof (type)计算出来的宽度,一般int为4 Bytes,char为1 Byte。。。
④有效对齐模数N: 编译器默认对齐模数为M,M可以用#pragma pack(n) 自己指定,数据类型的宽度为W=sizeof(type), 则N=min(M,W)
- 数组的有效对齐模数的计算
找到结构体中最宽类型的有效对齐模数N,则结构体的有效对齐模数为N,结构体的大小为N的整数倍,而且结构体的起始地址是%N=0。
第二种结论:
① 首先不计算基本类型的对齐模数,首先找到最宽类型的宽度W;
② 结构题的有效对齐模数为 N=min(默认的对齐模数,W)
时间: 2024-10-06 10:34:39