✍内容
cache
- 分为多个 set
- 每个 set 有多个行 line,使用变量 E 来表示
- 每个 line 分为三个部分
- valid 有效位 1 个 bit
- 表示当前这一行信息是否有效(能不能用)
- 值为 1 表示有效
- 值为 0 表示无效
- tag 标记
- 用来表示目标数据是否在当前这一行中(有没有用)
- 数据块
- 一小部分内存数据的副本,大小用 B 来表示
- valid 有效位 1 个 bit
- 每个 line 分为三个部分
- 每个 set 有多个行 line,使用变量 E 来表示
- cache 的大小用(S, E, B, m)元祖表示

cache 如何知道自己包含目标数据呢
目标数据长这样:

目标地址 - 被参数 S 和 B 分成了三个字段
- 第一步:通过长度为 s 的组索引位来确定目标数据在哪个 set
- 第二步:在确定的 set 中寻找哪个 line
- 通过长度为 t 的标记实现
- 注意找到的 line 中的 valid 位有效
Cache 为什么要用中间的作为组索引,而不是用高位
如果高位作为组索引位,那么一些连续的内存块就会映射到相同的 set 中

有一个 int 数组,一个 int 是 4 个字节,被放在右面这 4 个相同颜色的块里,比如 1 被放在绿色块中,给映射到了左边的绿色 set,读这个数组的时候,我们跳到第二个元素,这个元素被放在了第二个 line 中,cache 在索引的时候会反复跳 line,这是很费时的操作,不利于空间局部性