我开始学习 cpu 缓存在基础层面上的工作原理。但我对某一点感到困惑。当 CPU 根据两个恰好具有相同标记和设置的地址获得命中时会发生什么?
假设我们有一个带有 16 字节 block 的 64 字节缓存。地址是12位的并且使用直接映射。标签将有 5 位,集合将有 2 位,偏移量将有 5 位。如果我们有两个地址 0x070 (0000 0111 0000 inn binary ) 和 0x068 (0000 0110 1000),我们会看到标签(前五位)是相同的,集合是相同的,只是偏移量不同。
据我了解,当它是“命中”时,计算机仅考虑标签和设置。因此,如果两个地址相继运行,则缓存将会“命中”。为什么这有效?难道两个地址都包含不同的信息,因此如果CPU将它们视为相同的东西会导致错误吗?或者CPU是否检查这些值是否相同然后继续?
如果我遗漏了什么或犯了错误,请告诉我。
最佳答案
两个地址都位于同一高速缓存行内。 CPU 将缓存行作为一个整体进行操作,使用地址的低位来知道要修改缓存行中的哪个字节。
关于cpu - 缓存地址映射如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48914737/