LRU算法list链表实现

2021-04-14 03:26

阅读:514

标签:http   begin   取数据   https   tps   读取数据   数据   end   recent   

LRU是Least Recently Used的缩写,即最近最少使用,是一种常用的页面置换算法,选择最近最久未使用的页面予以淘汰。该算法赋予每个页面一个访问字段,用来记录一个页面自上次被访问以来所经历的时间 t,当须淘汰一个页面时,选择现有页面中其 t 值最大的,即最近最少使用的页面予以淘汰。

1存在

  存在就比较简单了,直接取出数据,页面数据不变,并把这个结点放在list链表最前面,删除原来位置的节点

2不存在

  cache满

  把最靠后的页面删除,然后把需要的页面放到最前的位置

  cache不满

  直接去读取数据,然后把他放在最前的位置

#include
#includevoid fun(std::listint>&L,int x)
{
    for(std::listint>::iterator it=L.begin();it!=L.end();it++)
    {
        if(*it==x)
        {
            L.push_front(x);
            L.erase(it);
            return;
        }
    }
    std::cout"发生缺页中断 "std::endl;
    L.pop_back();
    L.push_front(x);
}
int main()
{
    std::listint>L;
    int sum, n, i,x;
    sum = 0;         //初始cache内没有数据
    std::cin>>n; //读入页数
    while (true)
    {
        scanf("%d", &x);
        if (x 0)
        {
            break;
        }
        else
        {
            if (sum //cache未满,放至后面
            {
                L.push_front(x);
                std::cout"发生缺页中断 "std::endl;
                sum += 1; //并对cache+1
            }
            else
            {
                fun(L,x);
            }
        }
    }
    return 0;
}

C++ list 因为内部就是双向链表

 

LRU算法list链表实现

标签:http   begin   取数据   https   tps   读取数据   数据   end   recent   

原文地址:https://www.cnblogs.com/-citywall123/p/13338648.html


评论


亲,登录后才可以留言!