1

GameObject他のクラスの派生元となる名前のベースクラスがあります。連続したメモリ内のすべての派生クラスを割り当てることによってメモリ割り当てを処理する GameObjectsと、パフォーマンスが向上するかどうか疑問に思っています。

ゲームエンジンのフレームごとに、それらすべてを繰り返すことになります。

私の質問は、この場合の連続したメモリストレージは、連続していないメモリをマロッキングするよりも速い反復時間を与えてくれるのでしょうか?どちらの場合も、サイズが異なるため、ゲームオブジェクトへのポインタのベクトルを保持する必要があります。

4

2 に答える 2

0

キャッシュと局所性のため、連続メモリ内のオブジェクトを反復処理する方がうまくいく可能性があります。ただし、2 つのシステムを構築して実際にプロファイリングすることをお勧めします。幸運を!

于 2012-04-05T18:59:56.600 に答える
0

質問を理解しているかどうかわかりません。すべてのオブジェクトを 1 つの巨大なメモリ ブロックに事前に割り当て、そのサブセクションへのポインタをメモリに格納する方がよいかどうかを尋ねていますか? もしそうなら、それをしないでください。

システムは、連続していない小さなブロックではなく、大きなブロックの連続したメモリを要求する必要があるため、高速になる代わりに、速度が低下する可能性が高くなります。ブロックの割り当て、ページングなどに注意してください。100 メガバイトの連続したメモリを要求できますが、実際には連続していません。それの束はディスクにあり、とにかくすべてがページに分割されています。

次に、すべてのゲームオブジェクトを一度に割り当てて連続したメモリを取得するのか、それともオンデマンドで作成するのかという質問に直面します。この 1 つのマイナーな最適化を事前に割り当てますか? 新しいオブジェクトを作成する必要があり、連続したメモリ ブロックが十分に大きくない場合はどうなりますか? 等

本当に私はここで潜在的な問題をブレインストーミングしているだけです. 他のコメントが言ったように、時期尚早の最適化のケースです。

現在のサイズに基づいて成長およびコピーするベクトルではなく、すべてのポインターを連続した配列に格納した方が確実に高速になりますが、それでもゲームオブジェクトの量を完全に把握していない限り、割り当てるだけの方がよいでしょう1 回か 2 回だけ大きくなるように、十分に大きなベクトル。

于 2012-04-05T19:24:35.027 に答える