CPU和数据对齐
请原谅我,如果你觉得这已被无数次回答,但我需要回答以下问题!
>为什么数据必须对齐(在2字节/ 4字节/ 8字节边界上)?这里我怀疑的是当CPU具有地址线Ax Ax-1 Ax-2 … A2 A1 A0时,很可能顺序地寻址存储器位置.那么为什么需要在特定边界对齐数据呢? 解决方法
CPU是面向字的,而不是面向字节的.在简单的CPU中,存储器通常被配置为每个地址选通返回一个字(32位,64位等),其中底部的两个(或更多)地址线通常是无关位.
对于许多指令,Intel CPU可以对非字边界执行访问,但是由于内部CPU执行两次存储器访问和一个数学运算来加载一个字,因此存在性能损失.如果您正在执行字节读取,则不应用对齐. 某些CPU(ARM或Intel SSE指令)需要对齐的内存,并且在进行未对齐访问(或抛出异常)时具有未定义的操作.它们通过不实现更复杂的加载/存储子系统来节省大量的硅空间. 对齐取决于CPU字大小(16,32,64位),或者在SSE的情况下取决于SSE寄存器大小(128位). 对于您的上一个问题,如果您一次只加载一个数据字节,则大多数CPU都没有对齐限制(某些DSP没有字节级指令,但可能您不会遇到一个). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |