宁波高新区创苑路800号272-273室 14550676668 jiuyouapp@j909.vip

集团新闻

缓存总容量没变为什么相邻分组仍会冲突:独立演算第22例

2026-11-08

资源缓存即使还有其他位置空着,也可能因为地址只能放在固定位置而反复替换。把同一总容量拆成不同组,改变的是哪些数据允许共存。

比较四个单槽的直接映射缓存与两个双槽的组相联缓存。地址按数据块编号给出,前者槽号为编号除以四的余数,后者组号为编号除以二的余数;双槽组满时移走本组最久未使用者。

这一例的完整输入

二十次读取的数据块编号依次为[8, 3, 12, 5, 9, 1, 13, 9, 12, 2, 1, 12, 9, 13, 1, 4, 3, 1, 5, 1];双槽组中左侧是最久未使用项。

逐项计算记录

次 | 块 | 单槽命中/换出/四槽 | 双槽命中/换出/两组 1 | 8 | 0/None/[8, None, None, None] | 0/None/[[8], []] 2 | 3 | 0/None/[8, None, None, 3] | 0/None/[[8], [3]] 3 | 12 | 0/8/[12, None, None, 3] | 0/None/[[8, 12], [3]] 4 | 5 | 0/None/[12, 5, None, 3] | 0/None/[[8, 12], [3, 5]] 5 | 9 | 0/5/[12, 9, None, 3] | 0/3/[[8, 12], [5, 9]] 6 | 1 | 0/9/[12, 1, None, 3] | 0/5/[[8, 12], [9, 1]] 7 | 13 | 0/1/[12, 13, None, 3] | 0/9/[[8, 12], [1, 13]] 8 | 9 | 0/13/[12, 9, None, 3] | 0/1/[[8, 12], [13, 9]] 9 | 12 | 1/None/[12, 9, None, 3] | 1/None/[[8, 12], [13, 9]] 10 | 2 | 0/None/[12, 9, 2, 3] | 0/8/[[12, 2], [13, 9]] 11 | 1 | 0/9/[12, 1, 2, 3] | 0/13/[[12, 2], [9, 1]] 12 | 12 | 1/None/[12, 1, 2, 3] | 1/None/[[2, 12], [9, 1]] 13 | 9 | 0/1/[12, 9, 2, 3] | 1/None/[[2, 12], [1, 9]] 14 | 13 | 0/9/[12, 13, 2, 3] | 0/1/[[2, 12], [9, 13]] 15 | 1 | 0/13/[12, 1, 2, 3] | 0/9/[[2, 12], [13, 1]] 16 | 4 | 0/12/[4, 1, 2, 3] | 0/2/[[12, 4], [13, 1]] 17 | 3 | 1/None/[4, 1, 2, 3] | 0/13/[[12, 4], [1, 3]] 18 | 1 | 1/None/[4, 1, 2, 3] | 1/None/[[12, 4], [3, 1]] 19 | 5 | 0/1/[4, 5, 2, 3] | 0/3/[[12, 4], [1, 5]] 20 | 1 | 0/5/[4, 1, 2, 3] | 1/None/[[12, 4], [5, 1]]

读表时先把输入与计算后的结果分开。空值表示这一步没有适用对象或没有可用结果,不应自动换成零。编号只负责识别本例中的元素,同一个数字出现在不同字段时,要先确认它代表位置、对象还是数值。

怎样复核和使用

命中只更新本组的使用次序,缺失时才装入。两种缓存都从空开始且总共四槽,记录命中、被替换编号和全部槽位;不要把其他组的空位当成当前组可用位置。

这是一份人为给定的访问轨迹,某种分组在这里更好并不意味着对所有游戏资源都更好。实际缓存还涉及块大小、预取、写回和装入耗时,本文只比较规则产生的命中次数。

可以先遮住记录表,只按上述规则重算前两步,再选择一个边界条件重新试算。若结果不一致,应逐项检查输入顺序、端点是否包含以及状态在哪一步更新;不要只看最终合计相同就认为中间处理也完全正确。