私は最近、ゲーム プログラミングのために C++ に改宗しました。C# でメモリ管理とガベージ コレクションの問題を扱った経験は豊富ですが、C++ についてはそれほど多くはありません。
new
過去に、ゲームプレイ中の割り当てと解放 (つまりとdelete
) を回避し、必要になる可能性のあるすべてのものを前もって割り当てておくようにという漠然としたアドバイスを聞いたことがあります。しかし、これは、ゲームの実行中に必要に応じてゲーム オブジェクト (敵、パーティクルなど) を割り当てて解放するよりも、はるかに面倒でアーキテクチャ的に複雑です。
私が読んだアドバイスは、リソースに制約のあるプラットフォームに言及していたと思います。私は主に PC 向けに開発することを目指しており、頻繁に変更されるゲームの状態データはせいぜい数メガバイト程度になると思います。残りは、プリロードするテクスチャ、サウンド アセットなどです。
そこで私の質問は、ギガバイトのメモリを搭載した PC の世界で、ゲームの状態データ用に精巧なメモリ プールや事前割り当てなどを設定することは頭を悩ませる価値があるのでしょうか? それとも、限られたプラットフォームを最大限に活用する際に進化し、今では福音として繰り返されている、疑う余地のない「ベスト プラクティス」の伝統なのでしょうか?
私の 2 MB のゲーム データが断片化されて 4 MB に広がっているとしたら、1990 年以降に製造された PC ではそれが少しも問題になるとは考えられませんが、何か不足していないか知りたいです :)。