我需要对MIPS中的直接映射的缓存如何用于数组进行一些澄清。例如,对于十个项a [0]到a [9]的数组,以及以下直接映射缓存配置:直接映射缓存,总缓存大小为32字节,块大小为16字节。每个内存地址为32位。
将产生:4位偏移,1位索引,27位标记
我的缓存看起来像这样:
| Index | Valid | Tag | W0 | W1 | W2 | W3 |
| 0 | 0 | | | | | |
| 1 | 0 | | | | | |
我的问题是,在我第一次加载a [0]时,我知道在每个缓存索引中,我们可以存储4个单词。这是否意味着a [0],a [1],a [2],a [3]在对a [0]进行加载访问时都被加载到缓存中?因此,a [1],a [2]和a [3]将很受欢迎。
还是我理解错误?
取决于a[0]
的对齐方式。
假设a[0]
位于0x10010000。然后,已加载的16个字节的块从0x10010000开始,一直到0x1001000F。
[a[0]
位于0x10010000,a[1]
位于0x10010004,依此类推。全部在该高速缓存行中。
但是,如果a[0]
位于0x10010004,则已加载的16个字节的块仍与0x10010000处的块相同,但现在包含a[0]
,a[0]
,a[1]
前面的单词,和a[2]
,但不包括a[3]
。
但是,如果a[0]
位于0x10010008,则已加载的16个字节的块仍与0x10010000处的块相同,但现在包含a[0]
,a[0]
,a[1]
前面的两个字,但不是a[2]
而不是a[3]
。