c++ - C++中的缓存(或多或少适合初学者)

标签 c++ performance caching optimization hash

所以我对 C++ 并不陌生,但性能优化和缓存的整个概念是。我用 C++(为学校)实现了一个可扩展哈希类,现在我必须到处优化它。

谁能用简单的术语向我解释什么是缓存(以及它如何在 C++ 中实现)...我找到了一些教程,但我几乎一无所知。我阅读了一些有关静态变量的内容,这些变量会记住并保存在缓存内存中,某些方法计算并返回它的最后一件事。该函数仅在初始参数更改时重新计算(抱歉,如果我没有解释得太好 :D)。

根据我目前对缓存的理解,我认为(例如,对于我的 ExtHash 类中的 min 和 max 方法)我可以以某种方式缓存变量中的最小值和最大值,然后每次添加或删除元素时在表中,我只需要将该元素与缓存的最小值或最大值进行比较,以确定是否必须更改最小值和最大值(我不需要再次遍历整个数组来找到新的最小值和最大值)。 我理解正确吗?怎么办?

如果有人花时间解释一下,我将不胜感激。

最佳答案

说吧。缓存是您临时存储您将来可能需要的东西。

我给你举个例子。在这里,您的函数 foo 具有一些计算功能(无论它是什么)。

虽然函数 foo() 可能是一个昂贵的计算函数。

您的客户端代码端可能有:

int a = foo(10);
int b = foo(11);
int c = foo(11);

如果您不知道 c 与 b 相同,您将使用 'foo' 进行计算,这可能会很昂贵。

现在让我们将其更改为缓存:

int bar(int key)
{
    static int s_key = key;
    static int s_value = foo(key);
    if ( key == s_key ) return s_value;

    s_key   = key;
    s_value = foo(key);
    return s_value;
}

现在您不必在 foo(11) 上重复计算。

但是,这只是一个单项缓存,只能在您计算容易重复的输入时处理。

如果您正在处理 n-entry 缓存,则需要一些其他算法来管理缓存,例如“LRU”

关于c++ - C++中的缓存(或多或少适合初学者),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30853513/

相关文章:

C++ 字符串和数组

python - 多次迭代的性能

c++ - gcc-3 二进制文件是否与 gcc-4 兼容

c++ - 在 Cuda 8+ 中使用默认推力自展开 CUDA n 暗淡的相同类型元组创建?

javascript - 如何组织JS加载?

python - 在不使用 for 循环的情况下创建数据框的子集

java - 更新哈希表中的缓存数据

caching - Heroku Dev 上的片段缓存有限制吗?

caching - Varnish CentOS - 错误 503 后端获取失败

c++ - 源外构建与目标文件的规则不匹配