使用OO概念的内存缓存设计

use*_*850 3 c++ oop operating-system memory-management class

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

实际上,我被要求使用C++设计基于OO概念的内存缓存,但只是不知道如何启动.任何建议,将不胜感激.

Kon*_*lph 5

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

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

class Integer {
    int value;

public:

    Integer(int value) : value(value) {
        sleep(1000); // Simulates an expensive constructor
    }
};
Run Code Online (Sandbox Code Playgroud)

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

Integer one(1);
Integer two(2);
// etc.
Run Code Online (Sandbox Code Playgroud)

...但是稍后(在另一种方法中)也许你需要创建一个 2 的新实例:

Integer two(2);
Run Code Online (Sandbox Code Playgroud)

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

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;
}
Run Code Online (Sandbox Code Playgroud)

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

Integer one = make_int(1);
Integer two = make_int(2);
Integer other = make_int(2); // Recycles instance from above.
Run Code Online (Sandbox Code Playgroud)