c/c++中的字节对齐

    参加了很多面试,遇到字节对齐的问题不是1次2次,但一直没有彻底弄明白是什么意思,清明节刚好闲下来,彻底研究了一下,得到下面的结论,希望对以后的面试和工作有作用:

第一种结论:

  1. 首先提出几个概念

    ①基本类型:像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)

  2. 数组的有效对齐模数的计算

    找到结构体中最宽类型的有效对齐模数N,则结构体的有效对齐模数为N,结构体的大小为N的整数倍,而且结构体的起始地址是%N=0。

第二种结论:

        ① 首先不计算基本类型的对齐模数,首先找到最宽类型的宽度W;

        ② 结构题的有效对齐模数为 N=min(默认的对齐模数,W)   


你可能感兴趣的:(c/c++中的字节对齐)