对象池 - 以后创建对象不起作用

时间:2013-10-05 22:30:34

标签: c++ performance memory-management vector object-pooling

我的目标是创建一个包含许多预先准备好的向量(我之前没有两个数据成员,但我想在连续内存中尽可能多地分配)我的对象实例在连续内存中然后来在我的程序中,我可以快速使用其中一个准备好的“shell”来更快地实例化我的对象。最重要的是,所有这些对象都将位于相同的连续内存地址中。

为了达到上述目的,我做到了这一点:

vector<MyClass*>* v = new vector<MyClass>();
v.reserve(10000);

//Later on....

// I want to create my object in the continuous memory I "reserved" 
// and have a variable name to it:

v->push_back(MyClass m(10,20));
process(m);

但我不能让它在编译时仍然在对象上有一个变量名....这里是MyClass:

class MyClass{
    public:
        MyClass();
        MyClass(int a, int b);
        MyClass(const MyClass& m);
        int a;
        int b;
    private:
    //Made above example simpler by putting everything public
}

1 个答案:

答案 0 :(得分:0)

我做对象池,但我不会尝试在连续的内存中分配它们,因为这不是关于内存缓存,而是关于最小化对newdelete的调用。

我将对象保留在一个空闲列表中。 当我不再需要一个时,我将它推入免费列表中。 然后,当我需要一个时,我只是从免费列表中弹出一个。 如果自由列表为空,那就是我new新的。