假设我有一个 32 位可寻址内存和一个 4 kib 直接映射缓存。假设缓存的每个条目(行)都由一个唯一字(32 位)组成。
我们可以推断索引的大小为 10 位,因为 4*2^10 字节 / 4 = 2^10 字 = 2^10 行。
现在,由于每行只有一个字,我假设我们不需要偏移字段。因此,缓存的地址按以下方式分解:
- 位 0 至 9 :索引
- 位 10 至 31:标签
我的逻辑有错误吗?
答案1
我们需要 2 位作为偏移量,因为 32 位值有 4 个字节,并且每个字节可能被单独访问,因此偏移量可能是 0、1、2 或 3。
因此,直接映射缓存会将地址分解为以下形式:
- 位 0 至 1:偏移量
- 位 2 至 11:索引
- 位 12 至 31:标签
答案2
一个缓存行通常为 64 个字节,偏移位 0-6 选择该行上的一个字节。