Im Allgemeinen gehen Sie nicht mit zu wenig Arbeitsspeicher um. Die einzig vernünftige Option in Software, die so umfangreich und komplex wie ein Spiel ist, besteht darin, so schnell wie möglich in Ihrem Speicher-Allokator abzustürzen / zu bestätigen / zu beenden (insbesondere bei Debug-Builds). Zu wenig Arbeitsspeicher wird in einigen Fällen auf Kernsystem- oder Serversoftware getestet und verarbeitet, in der Regel jedoch nicht an anderer Stelle.
Wenn Sie eine höhere Speicherkapazität haben, stellen Sie stattdessen sicher, dass Sie nie mehr als diese Speicherkapazität benötigen. Sie können beispielsweise eine maximale Anzahl zulässiger NPCs gleichzeitig behalten und einfach aufhören, neue nicht-essentielle NPCs zu erzeugen, sobald diese Obergrenze erreicht ist. Für wichtige NPCs können Sie entweder festlegen, dass sie nicht wichtige ersetzen, oder Sie können einen separaten Pool / Cap für wichtige NPCs einrichten, um die sich Ihre Designer kümmern (z. B. wenn Sie nur 3 wichtige NPCs haben können, werden die Designer nicht mehr als 3 einsetzen Ein Bereich / Block - gute Werkzeuge helfen Designern dabei, dies richtig zu tun, und Tests sind natürlich unerlässlich.
Ein wirklich gutes Streaming-System ist auch wichtig, insbesondere für Sandbox-Spiele. Sie müssen nicht alle NPCs und Gegenstände im Speicher behalten. Während Sie sich durch Teile der Welt bewegen, werden neue Teile und alte Teile gestreamt. Dazu gehören im Allgemeinen NSCs und Gegenstände sowie Gelände. Design- und Konstruktionsbeschränkungen für Item-Limits müssen unter Berücksichtigung dieses Systems festgelegt werden. Dabei ist zu beachten, dass höchstens X alte Chunks beibehalten und proaktiv geladen werden. Y neue Chunks werden geladen, sodass das Spiel Platz für alle behalten muss Die Daten von X + Y + 1 Blöcken im Speicher.
Einige Spiele versuchen, Situationen mit unzureichendem Arbeitsspeicher mit einem Ansatz mit zwei Durchläufen zu behandeln. Denken Sie daran, dass die meisten Spiele viele technisch unnötige zwischengespeicherte Daten enthalten (z. B. die oben genannten alten Blöcke), und eine Speicherzuweisung kann etwa Folgendes bewirken:
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)
Dies ist eine letzte Maßnahme, um mit unerwarteten Situationen in Releases umzugehen. Während des Debuggens und Testens sollten Sie jedoch wahrscheinlich sofort abstürzen. Sie möchten sich nicht auf solche Dinge verlassen müssen (insbesondere, weil das Löschen der Caches schwerwiegende Auswirkungen auf die Leistung haben kann).
Sie könnten auch in Betracht ziehen, hochauflösende Kopien einiger Daten zu sichern. Beispielsweise könnten Sie die höher aufgelösten Mipmap-Ebenen von Texturen sichern, wenn Ihnen der GPU-Speicher (oder ein Speicher in einer Architektur mit gemeinsamem Speicher) ausgeht. Dies erfordert jedoch in der Regel viel architektonische Arbeit, um es wert zu machen.
Beachten Sie, dass einige sehr unbegrenzte Sandbox-Spiele auch auf dem PC ziemlich einfach zum Absturz gebracht werden können (denken Sie daran, dass die gängigen 32-Bit-Apps nur einen Adressraum von 2 bis 3 GB haben, selbst wenn Sie einen PC mit 128 GB RAM haben; ein 64-Bit-Computer). Bit-Betriebssystem und Hardware ermöglichen die gleichzeitige Ausführung von mehr 32-Bit-Apps, können jedoch nichts tun, um eine 32-Bit-Binärdatei mit einem größeren Adressraum auszustatten. Am Ende haben Sie entweder eine sehr flexible Spielwelt, die in jedem Fall unbegrenzten Speicherplatz benötigt, oder Sie haben eine sehr begrenzte und kontrollierte Welt, die in begrenztem Speicher (oder irgendwo dazwischen) immer perfekt funktioniert.