Як правило, ви не обробляєте поза пам'яттю. Єдиним розумним варіантом програмного забезпечення, такого великого і складного, як гра, є якнайшвидше вийти з ладу / затвердити / закінчити в алокаторі пам'яті (особливо в налагодженнях налагодження). Умови поза пам'яті тестуються та обробляються в деяких основних системних програмних або серверних програм, в деяких випадках, але зазвичай не в інших місцях.
Якщо у вас є верхній ковпачок пам'яті, ви натомість просто переконайтеся, що вам ніколи не потрібно більше, ніж цей об'єм пам'яті. Наприклад, ви можете тримати максимальну кількість дозволених NPC одночасно, і просто припинити нерестувати нові несуттєві NPC, як тільки ця шапка буде натиснута. Для найважливіших NPC ви можете або замінити їх на неістотні, або мати окремий пул / кришку для основних NPC, які ваші дизайнери знають створити (наприклад, якщо у вас може бути лише 3 основних NPCsa, дизайнери не поставлять більше 3 в область / шматок - хороші інструменти допоможуть дизайнерам зробити це належним чином, і тестування важливо, звичайно,).
Дійсно хороша потокова система також важлива особливо для пісочницьких ігор. Вам не потрібно зберігати всі NPC та елементи в пам'яті. Під час переміщення по шматочках світу нові шматки будуть передаватися в потоки, а старі шматки витікатимуть. Вони, як правило, включають NPC та предмети, а також місцевість. Маючи на увазі цю систему, слід встановити обмеження для проектування та інженерних обмежень, знаючи, що щонайбільше X старих шматочків буде зберігатися навколо та активно завантажуватись Y нові шматки, тому в грі потрібно мати місце для збереження всіх дані X + Y + 1 шматки пам’яті.
У деяких іграх намагаються впоратися із ситуаціями, що не знаходяться в пам’яті, із підходом у два проходи. Маючи на увазі, що в більшості ігор є багато технічно непотрібних кешованих даних (скажімо, старих фрагментів, згаданих вище), і розподіл пам'яті може зробити щось на кшталт:
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 (або будь-якої пам'яті в архітектурі спільної пам'яті). Зазвичай для цього потрібно багато архітектурних робіт, щоб зробити його вартим.
Зауважте, що деякі дуже необмежені ігри з пісочницею можуть бути досить просто розбиті, навіть на ПК (пам’ятайте, що загальні 32-бітні програми мають обмеження в 2-3 ГБ адресного простору, навіть якщо у вас ПК із 128 ГБ оперативної пам’яті; 64- бітова ОС і апаратне забезпечення дозволяють одночасно запускати більше 32-бітних додатків, але нічого не вдається зробити, щоб 32-бітний двійковий файл мав більший адресний простір). Зрештою, у вас або дуже гнучкий ігровий світ, який потребує необмеженого простору пам’яті для роботи у кожному випадку, або у вас дуже обмежений і контрольований світ, який завжди ідеально працює в обмеженій пам’яті (або щось десь посередині).