比如 写命中时 写回法是更新cache 这样会增加额外的开销(修改位) 但是如果考虑到局部性 这块在短时间内可能被再次写的话 那么只更新cache显然是好的 因为直写每次都要访存 慢的一批 但是 如果这个块被写了之后 短时间内不会被再写 而是过了一阵子就换出了 当然也要访存 那就亏了 因为有额外开销 也就是说 改一次 直写好 改多次 写回好 所以说写回是基于局部性原理
同样的 写不命中时 写分配法是更新主存 同时把块调用进来 也是基于他会被访问多次 如果只被写一次那么非写分配 直接写入主存显然是好的 因为直接写入主存不用调用块 指定比写两次快 而如果会被写多次 那么肯定是写分配好 因为在cache里访问修改指定是要快很多
因此可以看出 一个块可能被访问多次 采用写回写分配 可能被访问一次就相反 也就是写回写分配就是基于局部性原理了
再比如 我已经才用了写分配法 修改主存的时候 我把cache块也给调进来了 然后我用直写法 就是又修改cache又修改主存 那我之前为啥还非得把块调进来呢? 既然我要访存 不如直接用非写分配法 只修改主存就好了 要不调进cache害得多费事 所以写分配结合写回法 非写分配结合直写法
读csapp有感