class Foo{
std::vector<Foo*> myVec;
// Rest of the class
};
int main(){
// Some code
std::vector<Foo*> myVecOfFoo;
}
だから私のプログラムの中で経験していたキャッシュ・ミスのではなく、重要な数を軽減するライブラリ/ソリューションを探しています、私がした最初のものでしたstd::vector<Foo>
を作成し、全てのFoo*
がこのベクトルに向かって指し示すようにします。それは多くの助けとなりました。 私の主な問題はstd::vector<Foo*> myVec;
です。これらのベクトルの内部配列のそれぞれは、メモリの異なる部分に配置されています。同じ方法で私はすべての私のFoo
がメモリ内で連続しているようにstd::vector<Foo>
を作りました。私はすべて私のstd::vector<Foo*> myVec;
をメモリ(実際には内部の配列)に揃えたいと思います。どうやって?
注:重要な点は、myVec
のサイズがFoo
のインスタンスによって異なることです。そうでなければ、私は自明に単一のstd::vector<Foo*>
を構築し、getters/setterを書くことができます。また、私は野蛮人ではないのでFoo*
の代わりにstd::shared_ptr<Foo>
を持っていますが、例の理解が容易になります。最後に、私は所有権がDAGを形成することを保証するので、私は共有ポインタにサイクルを持たない。
まあ、可変サイジングでは、連続したメモリを取得するのが難しいかもしれません。それが重要なのであれば、私は多分アリーナ配分を調べるでしょう。 – mascoj
私が考えることの1つは、すべてのデータを一緒にメモリに格納するカスタムアロケータを使用することです。しかし、あなたが持つことができる 'Foo'の数が制限されます。 – NathanOliver
は、ブーストの[small_vector](http://www.boost.org/doc/libs/1_60_0/doc/html/boost/container/small_vector.html)を見てください – sp2danny