Secara umum, Anda tidak menangani kehabisan memori. Satu-satunya pilihan yang waras dalam perangkat lunak sebesar dan serumit gim adalah dengan hanya menabrak / menegaskan / mengakhiri pengalokasi memori Anda sesegera mungkin (terutama dalam pembuatan debug). Kondisi kehabisan memori diuji dan ditangani dalam beberapa perangkat lunak sistem inti atau perangkat lunak server dalam beberapa kasus tetapi tidak biasanya di tempat lain.
Ketika Anda memiliki kap memori atas, Anda hanya memastikan bahwa Anda tidak pernah membutuhkan lebih dari jumlah memori itu. Misalnya, Anda dapat menyimpan jumlah maksimum NPC yang diizinkan pada suatu waktu, dan cukup berhenti memunculkan NPC yang tidak penting baru begitu batasan itu dipukul. Untuk NPC esensial Anda dapat meminta mereka mengganti yang tidak penting atau memiliki kumpulan / batas terpisah untuk NPC esensial yang desainer Anda ketahui untuk mendesain (mis. Jika Anda hanya dapat memiliki 3 NPC esensial, desainer tidak akan menempatkan lebih dari 3 dalam area / chunk - alat yang baik akan membantu desainer melakukan ini dengan benar dan tentu saja pengujian sangat penting).
Sistem streaming yang sangat bagus juga penting terutama untuk gim sandbox. Anda tidak perlu menyimpan semua NPC dan item dalam memori. Saat Anda bergerak melalui potongan dunia, potongan baru akan mengalir dan potongan lama mengalir keluar. Ini umumnya akan mencakup NPC dan item serta medan. Desain dan batas teknis pada batas item harus ditetapkan dengan sistem ini dalam pikiran, mengetahui bahwa paling banyak potongan X lama akan disimpan dan potongan pro-aktif Y potongan baru akan dimuat, sehingga permainan perlu memiliki ruang untuk menyimpan semua data potongan X + Y + 1 dalam memori.
Beberapa gim berusaha menangani situasi kehabisan memori dengan pendekatan dua lintasan. Ingatlah bahwa sebagian besar gim memiliki banyak data yang secara teknis tidak perlu di-cache (katakanlah, potongan lama yang disebutkan di atas) dan alokasi memori mungkin melakukan sesuatu seperti:
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)
Ini adalah langkah terakhir untuk menangani situasi tak terduga dalam rilis tetapi selama debugging dan pengujian Anda mungkin harus segera crash. Anda tidak ingin harus bergantung pada hal-hal semacam ini (terutama karena membuang cache mungkin memiliki beberapa konsekuensi kinerja yang serius).
Anda mungkin juga mempertimbangkan untuk membuang salinan beresolusi tinggi dari beberapa data, misalnya Anda mungkin membuang tingkat tekstur mipmap beresolusi tinggi jika Anda kehabisan memori GPU (atau memori apa pun dalam arsitektur memori bersama). Ini biasanya membutuhkan banyak pekerjaan arsitektur untuk membuatnya sepadan.
Perhatikan bahwa beberapa gim sandbox yang sangat tidak terbatas dapat dengan mudah hanya macet, bahkan pada PC (ingat bahwa aplikasi 32-bit yang umum memiliki batas ruang alamat 2-3GB bahkan jika Anda memiliki PC dengan 128GB RAM; 64- bit OS dan perangkat keras memungkinkan lebih banyak aplikasi 32-bit berjalan secara bersamaan tetapi tidak dapat melakukan apa pun untuk membuat biner 32-bit memiliki ruang alamat yang lebih besar). Pada akhirnya, Anda memiliki dunia gim yang sangat fleksibel yang membutuhkan ruang memori tanpa batas untuk dijalankan dalam setiap kasus atau Anda memiliki dunia yang sangat terbatas dan terkontrol yang selalu bekerja dengan sempurna dalam memori yang terbatas (atau sesuatu di suatu tempat di antaranya).