面试宝典(PART IV)数据对齐问题

来源:互联网 发布:图片热点 js 编辑:程序博客网 时间:2024/05/29 04:27

示例代码:

#include <cstdio>#include <cstring>using namespace std;class B{private:    bool bool_a;    int int_a;    bool bool_b;};class C{    int int_a;    bool bool_a;    bool bool_b;};int main(){    printf("sizeof B=%d\n",sizeof(B));    printf("sizeof C=%d\n",sizeof(C));}

输出结果:

这里写图片描述

结果分析:

为何两者的输出结果不同。
在内存中,数据所在的内存地址必须是该数据长度的整数倍。
X86CPU可以直接访问对齐的内存,但是在访问没有对齐的内存的时候,就会在事先做出一系列的调整。这些调整对程序来说是透明的,但是会影响运行速度。所以编译器在编译程序的时候会尽量保证数据的对齐。

图解:

这里写图片描述