c++ - 使用 OO 概念的内存缓存设计

标签 c++ class memory-management operating-system oop

什么是内存缓存?我在网上找不到太多关于它的信息。

事实上,我被要求使用 C++ 设计一个基于 OO 概念的内存缓存,但只是不知道如何开始。如有任何建议,我们将不胜感激。

最佳答案

这取决于上下文,但通常情况下,内存缓存会存储一些值以便稍后检索,而不是创建新对象。这最常与数据库一起使用——或者实际上任何对象的构造/检索昂贵的应用程序。

对于一个简单的内存缓存,想象一下下面的虚拟类(它违反了大量的最佳实践,所以不要复制它!):

class Integer {
    int value;

public:

    Integer(int value) : value(value) {
        sleep(1000); // Simulates an expensive constructor
    }
};

现在假设您需要创建此类的实例:

Integer one(1);
Integer two(2);
// etc.

... 但稍后(以另一种方法)您可能需要创建 2 的一个新的实例:

Integer two(2);

这很贵。如果您可以回收旧值怎么办?使用构造函数,这是不可能的,但使用工厂方法我们可以轻松做到这一点:

class Integer {
    int value;

    static std::map<int, Integer> cache;

    Integer(int value) : value(value) {
        sleep(1000); // Simulates an expensive constructor
    }

    friend Integer make_int(int);
};

Integer make_int(int value) {
    std::map<int, Integer>::iterator i = Integer::cache.find(value);
    if (i != Integer::cache.end())
        return i->second;

    Integer ret = Integer(value);
    Integer::cache[value] = ret;
    return ret;
}

现在我们可以使用make_int 来创建或检索整数。每个值只会创建一次:

Integer one = make_int(1);
Integer two = make_int(2);
Integer other = make_int(2); // Recycles instance from above.

关于c++ - 使用 OO 概念的内存缓存设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5184625/

相关文章:

c++ - c/c++分布式计算框架

c++ - cmake,无法将静态库链接到共享库

java - 如何在 protected Java 类上实现接口(interface)

python - Kivy-在类外调用方法

c - 如何访问80C51的外部存储器

javascript - 如何协调宿主 JS 和 Wasm 模块之间的内存访问?

c++ - 在基于 Makefile 的解决方案中使用 Visual Studio 调试器

c++ - 程序错误;需要建议

c++ - 类定义和函数签名中的宏有什么用?

c++ - 在 C++ 中避免内存泄漏的一般准则