我們先來討論乙個經典的鍊錶應用場景,那就是 lru 快取淘汰演算法。
快取的大小有限,當快取被用滿時,哪些資料應該被清理出去,哪些資料應該被保留?這就需要快取淘汰策略來決定。
常見的策略有三種:
先進先出策略 fifo(first in,first out)、最少使用策略 lfu(least frequently used)、最近最少使用策略 lru(least recently used)。
三種最常見的鍊錶結構,它們分別是:單鏈表、雙向鍊錶和迴圈鍊錶。
陣列簡單易用,在實現上使用的是連續的記憶體空間,可以借助 cpu 的快取機制,預讀陣列中的資料,所以訪問效率更高。而鍊錶在記憶體中並不是連續儲存,所以對 cpu 快取不友好,沒辦法有效預讀.
陣列的缺點是大小固定,一經宣告就要占用整塊連續記憶體空間。如果宣告的陣列過大,系統可能沒有足夠的連續記憶體空間分配給它,導致「記憶體不足(out of memory)」。如果宣告的陣列過小,則可能出現不夠用的情況。這時只能再申請乙個更大的記憶體空間,把原陣列拷貝進去,非常費時。鍊錶本身沒有大小的限制,天然地支援動態擴容,我覺得這也是它與陣列最大的區別。
鍊錶(上) 如何實現LRU快取淘汰演算法
鍊錶是一種最基礎的資料結構,學習鍊錶有什麼用?為了回答這個問題,先來討論乙個經典的鍊錶應用場景,那就是 lru 快取淘汰演算法。快取是一種提高資料讀取效能的技術,在硬體設計 軟體開發中都有著非常廣泛的應用,比如常見的 cpu 快取 資料庫快取 瀏覽器快取等等。快取的大小有限,當快取被用滿時,哪些資料...
鍊錶 如何實現LRU快取淘汰演算法
乙個經典的鍊錶應用場景,就是lru快取淘汰演算法 快取是一種提高資料讀取效能的技術,比如cpu快取 資料庫快取 瀏覽器快取等等 快取的大小有限,當快取被用滿的時候哪些資料該被清理出去?哪些資料該被保留?需要快取淘汰策略來決定 先進先出策略fifo,最少使用策略lfu,最近最少使用策略lru 陣列需要...
鍊錶 如何實現LRU快取淘汰演算法
一 什麼是鍊錶?和陣列一樣,鍊錶也是一種線性表。從記憶體結構來看,鍊錶的記憶體結構是不連續的記憶體空間,是將一組零散的記憶體塊串聯起來,從而進行資料儲存的資料結構。二 為什麼使用鍊錶?即鍊錶的特點 三 常用鍊錶 單鏈表 迴圈鍊錶和雙向鍊錶 四 選擇陣列還是鍊錶?五 應用 如何分別用鍊錶和陣列實現lr...