コンテナがある場合:
std::vector<T*> elements;
オブジェクトがすべて連続して割り当てられるように、placement new を使用してオブジェクトを割り当てることはできますか? 私はこのようなことができるように:
size_t elementIndex = someRandomElement - elements[0];
どこsomeRandomeElement
からのランダムな要素でelements
ありelementIndex
、正しいインデックスを格納するsomeRandomElement
ので、elements[elementIndex] == someRandomElement
これは、メモリ マネージャーの現在の実装に必要です。今日完成できた実装がありますが、要素 (ボクセル、三角形など) が GetIndex() および SetIndex() 関数を持つ必要があるため、要素がポインターとして返される場合、配列内の要素のインデックスを見つけることができますelements
。つまり、変更できない要素(Ogre::Vector3としましょう)はマネージャーを使用できません(私の場合、断片化しているため、マネージャーを使用する必要があります想い出)。
私の唯一の他の解決策は、アクセサーとして機能し、インデックスと要素へのポインターを持つ構造を持つことですが、これによりメモリ使用量が増加します (現在 500 万の要素を扱っていることを考慮して)。
注: 今日投稿した同様の質問がありますが、そこにある回答は、私の要件に完全に反するいくつかの仮定を行っています。要件の 1 つは、ベクトルをポインターで満たす必要があること
T
です。そうしないと、コードベースの大部分を変更する必要があります。次に、100,000 (概算) を超える要素を初期化すると、bad_alloc 例外が発生します。各要素のサイズは 196 バイトです (132 バイトに減らすことができました)。