私は高性能を必要とするビデオ ゲームに取り組んでいるので、適切なメモリ戦略またはゲームの特定の部分、ゲームの「モデル」である部分、ゲーム表現をセットアップしようとしています。
ゲームのルールに従って、表現の一貫性を保つために内部にさまざまなマネージャーを含む、ゲーム全体の表現を含むオブジェクトがあります。現在、すべてのゲーム エンティティはタイプ固有のファクトリによって生成されているため、これらのエンティティのメモリ管理を必要に応じて分離および変更できるいくつかのファクトリがあります。
現在、私はこれら 2 つの選択肢のどちらかを選択しています。
- タイプごとにメモリプールを用意する:オブジェクトプールは割り当てられたオブジェクトのサイズをすでに知っているため、非常に高速な割り当て/割り当て解除と最小限の断片化が可能になります。私を悩ませていることの1つは、そのような複数のプールを別々に持つことです。これにより、他のソリューションがより効率的になる可能性があります...
- 1 つのゲーム表現のすべてのファクトリで 1 つの大きなメモリ プールを共有する: (boost::pool のようなものをいくつかのアダプタ関数と共に使用) そうすれば、すべてのゲーム オブジェクト メモリが一緒に割り当てられ、ゲームに 1 ビットの割り当てを持つことができます。合計サイズはすでにわかっています (常にそうとは限りません)。同じプール内に異なるサイズのオブジェクトが存在するため、プール内で断片化が発生する可能性があるため、A よりも優れたソリューションであるかどうかはわかりませんが、メモリ分析やその他の問題の修正にはより簡単なようです。
今、私は A でいくつかの実世界の経験があったので、B の経験がなく、長期的なプロジェクトのために、これらのソリューションに関するアドバイスが欲しいです。長期プロジェクトに適していると思われるソリューションはどれですか? またその理由は? (注: この場合、ゲームモデルがゲーム編集にも使用されるため、プールが本当に必要です。そのため、小さなオブジェクトの割り当て/割り当て解除が大量に発生します)。
明確にするために編集:私はC++ ifを使用しています(まだ明確ではありません)