通常、メモリ不足は処理しません。ゲームのように大きく複雑なソフトウェアの唯一の健全なオプションは、できるだけ早くメモリアロケータでクラッシュ/アサート/終了することです(特にデバッグビルドの場合)。メモリ不足状態は、一部のコアシステムソフトウェアまたはサーバーソフトウェアでテストおよび処理されますが、通常はそうではありません。
上限のメモリキャップがある場合は、代わりに、その量以上のメモリを必要としないことを確認してください。たとえば、一度に最大数の許可されたNPCを保持し、その上限に達すると新しい非必須NPCの生成を停止できます。エッセンシャルNPCについては、非エッセンシャルNPCを置き換えるか、デザイナーが設計する必要のあるエッセンシャルNPC用の別のプール/キャップを持つことができます(たとえば、エッセンシャルNPCsaを3つしか持てない場合、デザイナーは3つ以上を入れません)エリア/チャンク-優れたツールは設計者がこれを適切に行うのに役立ち、テストはもちろん不可欠です。
サンドボックスゲームでは、本当に優れたストリーミングシステムも重要です。すべてのNPCとアイテムをメモリに保持する必要はありません。世界のチャンクを移動すると、新しいチャンクがストリームされ、古いチャンクがストリームされます。これらには通常、NPCとアイテム、地形が含まれます。アイテム制限の設計とエンジニアリングの上限は、このシステムを念頭に置いて設定する必要があります。最大でX個の古いチャンクが保持され、プロアクティブにロードされるY個の新しいチャンクがロードされるため、ゲームにはすべてを保持するスペースが必要ですメモリ内のX + Y + 1チャンクのデータ。
一部のゲームは、2パスアプローチでメモリ不足の状況を処理しようとします。ほとんどのゲームには多くの技術的に不要なキャッシュデータ(上記の古いチャンクなど)があり、メモリの割り当ては次のようなことを行うことに注意してください。
allocate(bytes):
if can_allocate(bytes):
return internal_allocate(bytes)
else:
warning(LOW_MEMORY)
tell_systems_to_dump_caches()
if can_allocate(bytes):
return internal_allocate(bytes)
else:
fatal_error(OUT_OF_MEMORY)
これは、リリース中の予期しない状況に対処するための最後の手段ですが、デバッグおよびテスト中は、おそらくただちにクラッシュするはずです。この種のものに依存する必要はありません(特にキャッシュのダンプはパフォーマンスに重大な影響を与える可能性があるため)。
また、一部のデータの高解像度コピーのダンプを検討することもできます。たとえば、GPUメモリ(または共有メモリアーキテクチャのメモリ)が不足している場合、高解像度のテクスチャのミップマップレベルをダンプできます。ただし、これを実現するには、通常、多くの建築作業が必要です。
一部の非常に無制限のサンドボックスゲームは、PCでも簡単にクラッシュする可能性があることに注意してください(一般的な32ビットアプリでは、128 GBのRAMを搭載したPCでも、アドレス空間が2-3 GBに制限されていることに注意してください。ビットOSとハードウェアを使用すると、より多くの32ビットアプリを同時に実行できますが、32ビットバイナリのアドレス空間を大きくすることはできません)。最終的に、すべての場合に実行するために無制限のメモリ空間を必要とする非常に柔軟なゲームワールドがあるか、または制限されたメモリ(またはその間の何か)で常に完全に動作する非常に制限され制御されたワールドがあります。