LRU缓存和快速定位对象通常使用哪些数据结构?

时间:2011-06-15 00:40:55

标签: c++ performance caching data-structures

我打算实现一个HashTable来快速定位对象,这对我的应用程序非常重要。

但是,我不喜欢扫描的想法,并且可能不得不锁定整个表以便找到上次访问的对象。表格可能非常大。

通常使用哪些数据结构来克服这种情况?

e.g。我以为我可以把对象放到FIFO和缓存中,以便知道有多旧。但这不会支持LRU算法。

有什么想法吗?鱿鱼怎么做的?

2 个答案:

答案 0 :(得分:13)

链接列表适用于LRU缓存。对于链表内的索引查找(将条目移动到链接列表最近使用的结尾),请使用HashTable。最近最少使用的条目将始终位于链接列表的最后。

答案 1 :(得分:6)

您可能会在使用STL容器(或基于boost::bimap的替代方案)感兴趣的LRU缓存实现上找到此article。使用STL,基本上您可以将映射(用于快速键值查找)和单独的键或迭代器列表组合到该映射中(以便于维护访问历史记录)。