LRU页面置换算法C++代码
常见的缓存算法:
- LRU:(least recently used) 最近最少使用,思想是如果一个数据刚被访问过,那么将来被访问的几率也更高
- LFU:(least frequently used) 最少经常使用,思想是如果一个数据很久不被访问,那么将来被访问的几率也不大
- FIFO:(first in first out) 先进先出,思想是如果一个数据最先进入缓存,则应该最早淘汰掉
我们这里主要看一看LRU缓存的规则:
- 新数据插入到链接头部
- 每当数据被访问,则将数据移到链表头部
- 当链表满的时候,则将链表尾部的数据删除,在将新数据插入链表头部
LRU:cache应该具备的两个操作:
- get(key):如果key在hashmap中存在,则直接查找其在list链表中的位置,然后将其移动到链表头部再更新其hashmap的映射
- set(key,value):如果key在hashmap中不存在,并且页面还满了,则删除尾部节点,再插入,如果存在于hashmap中,则将其从list链表中移动到链表头部,再更新其hashmap的映射
我们现在自己手动实现一下:
我们这里LRU使用的是list + map