微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么在生产软件和硬件中不使用 O(1) 严格的 LRU 实现?

如何解决为什么在生产软件和硬件中不使用 O(1) 严格的 LRU 实现?

解释更多:

在阅读 LRU 或最近最少使用的缓存实现时,我遇到了使用 unordered_map (c++) 和双向链表的 O(1) 解决方案。这是非常有效的,因为从这个映射访问一个元素本质上是 O(1)(由于非常好的内部散列),然后从这个双向链表中移动或删除也是 O(1)。

解释清楚here

但是,经过更多的研究,我发现了 How is an LRU cache implemented in a CPU?

"对于更大的结合性,状态数增加 戏剧性:方法数量的阶乘。所以 4 路缓存将 有 24 个状态,每组需要 5 位,一个 8 路缓存将有 40,320 个状态,每组需要 16 位。除了存储 开销,更新值的开销也更大"

this

现在,我很难理解为什么 O(1) 解决方案不能解决大多数保存每组状态和跟踪 LRU 的“年龄位”的问题?

我的猜测是,使用哈希图无法保存关联性,但是每个条目都可以是一个独立的条目,并且由于访问是 O(1),所以应该没有关系,对吧?我现在唯一能想到的就是这个 hashmap 的大小,但还是想不通为什么?

感谢任何帮助,谢谢!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。