gpt4 book ai didi

algorithm - 理解单词对齐

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:50:31 25 4
gpt4 key购买 nike

我理解对齐访问内存意味着什么,但我不明白为什么这是必要的。例如,为什么我可以从地址 0x…1 访问单个字节?但我无法从同一地址访问半字(两个字节)。

同样,我知道如果你有一个地址 A和一个大小为 s 的对象如果A mod s = 0,访问是对齐的.但我只是不明白为什么这在硬件层面很重要。

最佳答案

硬件很复杂;这是一个简化的解释。

典型的现代计算机可能具有 32 位数据总线。这意味着 CPU 需要执行的任何提取操作都将提取特定内存地址的所有 32 位。由于数据总线不能获取任何小于 32 位的数据,地址总线上什至没有使用最低的两个地址位,所以就好像 RAM 被组织成一个 32 位的字序列 而不是 8 位字节

当 CPU 获取单个字节时,总线上的读取周期将获取 32 位,然后 CPU 将丢弃其中的 24 位,将剩余的 8 位加载到任何寄存器中。如果 CPU 想要获取一个 在 32 位边界上对齐的 32 位值,它有几个一般选择:

  • 在总线上执行两个独立的读取周期以加载数据字的适当部分并重新组合它们
  • 在丢弃地址低两位确定的地址处读取32位字
  • 读取一些组装成 32 位字的意想不到的字节组合,可能不是您想要的
  • 抛出异常

我使用过的各种 CPU 都采用了所有这四种路径。通常,为了获得最大兼容性,将所有 n 位读取对​​齐到 n 位边界是最安全的。但是,如果您确定您的软件将在具有已知未对齐读取行为的某些特定 CPU 系列上运行,那么您当然可以走捷径。即使可以进行未对齐读取(例如在 x86 系列 CPU 上),它们也会变慢。

关于algorithm - 理解单词对齐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29842375/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com