0

私の目的は、事前に準備された多くのベクトルを作成することです (後で 2 つのデータ メンバーはありませんが、連続メモリにできるだけ多く割り当てたいと思います)。これらの準備された「シェル」の 1 つをすばやく使用して、オブジェクトをより迅速にインスタンス化できます。最も重要なことは、これらのオブジェクトのすべてが同じ連続したメモリ アドレスに配置されることです。

上記を達成するために、私はこれを行いました:

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
}
4

1 に答える 1

0

私はオブジェクト プーリングを行いますが、連続したメモリにそれらを割り当てようとはしません。これはメモリ キャッシングに関するものではなく、newandへの呼び出しを最小限に抑えるためのものだからdeleteです。

使用済みオブジェクトをフリーリストに保持します。不要になったら、フリーリストにプッシュします。次に、必要なときに、空きリストから 1 つだけ取り出します。フリーリストが空の場合、それnewが新しいリストです。

于 2013-10-06T01:21:18.650 に答える