硬件很复杂; 这是一个简化的解释。
典型的现代计算机可能具有32位数据总线。这意味着,CPU需要进行的任何取回 *** 作都会取回特定存储器地址的所有32位。由于数据总线无法获取小于32位的任何内容,因此地址总线上甚至不使用最低的两个地址位,因此,就好像RAM被组织为32位
字 而不是8位 字节 的序列一样。
当CPU对单个字节进行访存时,总线上的读取周期将访存32位,然后CPU将丢弃其中的24位,将剩余的8位加载到任何寄存器中。如果CPU要获取 未
在32位边界上对齐的32位值,则有几种常规选择:
- 在总线上执行两个单独的读取周期,以加载数据字的相应部分并重新组装它们
- 通过丢弃地址的低两位来读取该地址处的32位字
- 读取一些意外的组合成32位字的字节组合,可能不是您想要的字节组合
- 抛出异常
我使用过的各种CPU都采用了所有这四个路径。通常,为了获得最大的兼容性,将所有n位读取对齐到n位边界是最安全的。但是,如果确定您的软件可以在某些特定的CPU系列上以已知的未对齐读取行为运行,那么您当然可以采用快捷方式。而且,即使可能进行未对齐的读取(例如在x86系列CPU上),读取速度也会变慢。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)