也就是被淘汰的顺序.
考虑LRU cache的如下操作:
1.添加 Add item
向LRU Cache中添加永远只需要向队列尾部添加
2.删除 Delete item
对应尾部添加,则删除应该发生在队列头部.
3.查找 Search item
查找应该做两件事,一是真正的查找,返回一个True or False.
但是如果命中,则还应该把命中的item移动到尾部,使它不容易被删除.
4.替换-Replace item
Replace可以被看成是两个操作的合并:Replace = Add + Delete,
其中add发生在尾部,delete发生在头部。
5.是否还应该加上有效位,valid bit,以及对应的修改该位的功能?
set_invalid(),set_valid(),is_valid()
可能会需要的参数,
1. Cache size (number of items, Cache 容量)
2. Cache item Data Type (每个item是一个文件,一个block,还是...?)
3. 好像没有了吧?^_^
一下是我的LRU Cache实现的主要代码片断:
class LRU_Cache
{
public:
void _add(int id);
void _del(int id);
bool _find(int id);
bool search(int id);
private:
list
}
void LRU_Cache::_add(int id)
{
lru.push_back(id);
}
void LRU_Cache::_del(int id)
{
lru.remove(id);
}
bool LRU_Cache::_find(int id)
{
list
for (it=lru.begin(); it!=lru.end(); it++)
if ((*it)==id)
return true;
return false;
}
No comments:
Post a Comment