我听说很多数据应该在内存中正确对齐以提高访问效率。CPU 在字边界上访问内存。
所以在下面的场景中,CPU 必须进行 2 次内存访问才能获得一个单词。
Supposing: 1 word = 4 bytes
("|" stands for word boundary. "o" stands for byte boundary)
|----o----o----o----|----o----o----o----| (The word boundary in CPU's eye)
----o----o----o---- (What I want to read from memory)
为什么会发生这种情况?CPU只能在字边界读取的根本原因是什么?
如果 CPU 只能访问 4 字节的字边界,地址线应该只需要 30 位,而不是 32 位宽度。因为在 CPU 的眼中,最后 2 位始终为 0。
加 1
更重要的是,如果我们承认 CPU 必须在字边界处读取,为什么边界不能从我想要读取的位置开始呢?似乎边界在 CPU 的眼中是固定的。
添加 2
根据AnT的说法,边界设置似乎是硬连线的,它是由内存访问硬件硬连线的。就这一点而言,CPU 是无辜的。