C 實現LRU(最久未使用)快取演算法

2021-10-04 22:47:16 字數 1087 閱讀 9908

lru快取演算法也叫lru頁面置換演算法,是一種經典常用的頁面置換演算法,本文將用c++實現乙個lru演算法。

lru演算法實現並不難,但是要高效地實現卻是有難度的,要想高效實現其中的插入、刪除、查詢,第一想法就是紅黑樹,但是紅黑樹也是一種折中的辦法。插入、刪除效率最高當屬鍊錶,查詢效率當屬hash。所以,這裡我們就將鍊錶和hash結合起來,利用空間換時間的思想,實現lru演算法。

include 

#include

#include

using

namespace std;

class

lrucache

intget

(int key)

void

set(

int key,

int val)

cachelist.

push_front

(node

(key,val));

cachemap[key]

=cachelist.

begin()

;}else

}void

show()

cout<}private

:struct node

};int capacity;

list cachelist;

unordered_map<

int,list

::iterator> cachemap;};

intmain()

{ lrucache lru(3

);lru.

set(1,

10); lru.

show()

; lru.

set(2,

20); lru.

show()

; lru.

set(3,

30); lru.

show()

; lru.

set(4,

40); lru.

show()

;

C 實現LRU(最久未使用)快取演算法

lru快取演算法也叫lru頁面置換演算法,是一種經典常用的頁面置換演算法,本文將用c 實現乙個lru演算法。lru演算法實現並不難,但是要高效地實現卻是有難度的,要想高效實現其中的插入 刪除 查詢,第一想法就是紅黑樹,但是紅黑樹也是一種折中的辦法。插入 刪除效率最高當屬鍊錶,查詢效率當屬hash。所...

LRU最久未使用淘汰演算法實現

lru 缺頁置換演算法中的一種,當容量滿的時候,新增新的一頁,就會置換淘汰掉最久未使用的一頁。實現 可以採用鍊錶實現 主要是因為該演算法體現在頭部和尾部的操作居多。因此採用雙向鍊錶為佳。介於c stl容器的list實現為乙個方式。由於牽扯到判斷是否存在的問題,因此需要遍歷查詢。該演算法實現時間複雜度...

LRU最近最久未使用演算法

標籤 演算法 作業系統 舉報 作業系統知識庫 c 21 作者同類文章x 作業系統學習 11 作者同類文章x 最近最久未使用演算法需要引入記憶體塊時鐘,即為每個記憶體塊設定乙個計時器,用於記錄相應記憶體塊中的頁面已經存在的時間。每次置換選出所有記憶體塊時鐘中最大者作為被置換頁面,當頁面發生置換時,將其...