撤销网站备案,沈阳网站制作思路,青岛网站建设全包,培训网站建设课程在面试或工作中#xff0c;经常会遇到内存对齐的问题。这里结合我的理解谈一谈对内存对齐的理解。1. 为什么要内存对齐#xff0c;不对齐会怎么样#xff1f;内存中存放数据是为了给CPU使用#xff0c;CPU访问内存数据时会受到地址总线宽度的限制#xff0c;也就是一次能从…在面试或工作中经常会遇到内存对齐的问题。这里结合我的理解谈一谈对内存对齐的理解。1. 为什么要内存对齐不对齐会怎么样内存中存放数据是为了给CPU使用CPU访问内存数据时会受到地址总线宽度的限制也就是一次能从内存中拿多少数据到CPU这里我们忽略CPU高速缓存。而且CPU从内存中获取数据时起始地址必须是地址总线宽度的倍数我们用的intel CPU能处理不对齐的情况某些CPU不能处理即遇到不对齐程序会崩溃...。例如CPU地址总线是64位bit8字节当一个int4字节存储到地址 0x06 时CPU如何获取这个int值第一步读取0x00~0x08 8个字节然后保存后两个字节到 int 的前两个字节。第二步读取0x08~0x0F 8个字节然后保存前两个字节到int的后两个字节。图1-内存访问上面的例子可以看到从内存中读取一个int到CPU中需要从内存中读取两次。这样大大降低了执行的效率如何提升性能 答案就是内存对齐2. 内存对齐的单位是什么通过上面的分析知道内存对齐的目的是为了让CPU能一次获取到数据从而提升性能。学过汇编会了解CPU只能使用基本类型char, short, int, long, float, double 等不能使用数组或结构体等复合类型汇编中并没有一个指令能直接存取一个struct或数组。所以内存对齐的单位是基本类型目标是让CPU能一次获取到基本类型的值。3. 如何进行内存对齐通过上面的介绍我们可以得出a. 内存对齐是指变量地址的对齐而不是变量大小的对齐。变量地址的对齐是指变量地址 对 变量大小求模为0。b. 结构体中每一个成员都要求是内存对齐的。c. 结构体中的数组按数组的类型对齐。4. 如何计算内存对齐分析内存对齐只需要记住上一个小节中变量地址的对齐是指变量地址 对 变量大小求模为0。数组以数组本身的类型来计算例如char c[5] 按 char 类型大小计算对齐double d[22] 按 double 类型大小计算对齐。图2-示例程序图3-运行结果通过这个示例仔细想想内存对齐就很简单了。