C ++缓存可根据项目的“值”将其逐出

时间:2019-01-06 20:31:42

标签: c++ algorithm performance caching

我想在C ++中实现模板化且受内存限制的缓存。 我可以很容易地根据大小等一些基本值,在大小达到一定限制时建议第一项 memlimit / (sizeof(TKey) + sizeof(TVal))

但我理想情况下想应用一些逻辑,以便将“最不有价值”的物品逐出。 我的想法是逻辑将遵循以下原则:

  • 发生高速缓存未命中时,进行计算,但还要记住计算时间。将此时间存储在某个地方。
  • 发生缓存命中时,增加访问该缓存值的次数。
  • 达到内存限制并且要存储另一个项目时,逐出“价值”最少的 N 个项目,其中“价值”定义为计算所需的时间,乘以按访问的次数。

有人可以建议这种逻辑是否合理吗?

这是受欧拉计划问题的启发,但并非特定于其中一个问题-我想制作一个通用组件,这对于其他事情来说将是一个非常不错的通用工具。

有没有适合的现成商品?

我开始像

template<class TKey, class TValue>
public class cache
{
    public:
        std::map<TKey, TValue> values;

        void encache(const TKey& key, const TKey& value)
        {
            if(values.insert(std::pair<TKey, TValue>(key, value))
            {
                if(values.size() > 10000000 /* some limit */ )
                {
                     // evict the 'worst' values - ???
                }
            }
        }
}

但不确定用于存储值的最佳数据结构以及驱逐算法的外观。

0 个答案:

没有答案