为什么该程序写入比读取慢?
复制本地路径 | 在线编辑
感谢作者:https://www.bilibili.com/video/BV1gu41117bW
非常好的视频,很有意思的问题。
如下图所示,为什么写入数组比读取数组要慢?
问题说明


回答
这是 Cache 和 Memory 打交道的原因。如果 Cache 向 Memory 中写入数据,必须是 64B 为寻址。所以像上面的代码中给某个地址写入 4B 数据时,他需要把这个地址计算对齐后的地址,读取 64B 数据到 Cache,把其中对应的 4B 数据替换掉,择机写回去(也就是说不是立即写回,假如下一次又要修改这个 64B 部分或整体数据,就可以利用 Cache 存好的了)。

而读取就没有这个问题,Cache 也是从 Memory 读取 64B,但是由于上面代码读取数组时顺序读取,当某次 Cache 从 Memory 搬运 64B 之后,读取下一个数据时这个 64B 已经存在 Cache 里面了,所以 Cache 直接就返回结果了。
综上,假设数组有 64*n B,那么读取时 Cache 从 Memory 读取 n 次;写入时 Cache 必须从 Memory 读取 n 次(关键),向 Memory 写回也是 n 次,所以结果就写入比读取慢两倍。