Hallo erstmal,
bevor man sich Gedanken darüber macht, ob es Sinn macht einen Speichermanager zu schreiben, sollte man sich erstmal fragen, ob man es besser hinbekommt, als das Betriebssystem. Effiziente Speicherdefragmentierung ist nicht gerade einfach mal so programmiert und wenn man zur Laufzeit gerade Zeiger verschieben muss braucht man auch ein Konstrukt, das dafür sorgt, dass alle aktiven Zeiger nach wie vor gültig sind.
Sinn würde es ganz sicher machen, wenn man ein Konzept hat das perfekt auf das Einsatzgebiet abgestimmt ist, da das Betriebssystem alleine dadurch schon Fragmentierung erzeigt, wenn man einen Haufen Speicher in kleinen Häppchen allokiert, da das Betriebssystem den Arbeitsspeicher in Sektoren unterteilt und man nicht weniger Speicher allokieren kann, als diese Mindestgröße vorgibt. Man würde also ungewollt Speicher verschwenden.
Auch könnte man abschätzen wie viel Arbeitsspeicher genutzt wird (wenn man eine Höchstanforderung einhalten muss).
In allem kann man in den meisten Fällen davon abraten.
Wenn man es aber einfach mal gemacht haben will, ist es schon ne gute Übung wenn man sich daran versucht, sich einen kleinen Speichermanager zu schreiben. Man kann recht viel dabei lernen (Pointer verinnerlichen und sich ein Bild davon machen wie sowas gemacht wird, um seine Programme effizienter zu machen - mehrere kleine Allokationen zu größeren zusammenfassen, wie Krishty schon sagte - und ähnliche Optimierungen).
Zu der Sache mit dem virtuellen Arbeitsspeicher:
Man sollte nicht einfach davon ausgehen, immer 4GB und mehr an Arbeitsspeicher zur Verfügung zu haben.
Wenn man da nicht aufpasst, kann das ganz schnell zu einem riesigen Problem werden. (Mal von Hintergrundprogrammen abgesehen)
Angenommen man entwickelt auf einem PC mit 8GB Arbeitsspeicher, den man "gut" ausgenutzt hat, und ist dann fertig mit seinem Spiel. Man gibt das Spiel weiter und es wird von jemandem auf einem Laptop getestet, welcher 2GB Arbeitsspeicher hat. Folge davon ist meistens eine enorm große Auslagerungsdatei (welche evtl. durch das Betriebssystem auf z.B. 3GB beschränkt ist), wodurch das Spiel entweder einfach mit einer Fehlermeldung abstürzt oder bei 10FPS kriecht, trotz ansonsten geringen Systemanforderungen.
Die Aufgabe das ganze auszubügeln kann u.U. nochmal so lange dauern wie man für das Projekt investiert hat, da man sehr grundlegend in sein Design eingreifen muss (und auch die ganze Debugphase vorn anfängt).
Besser dagegen wäre: Ein Ressourcenmanager (- der problemlos mit einem evtl. exisiterenden Speichermanager zusammenarbeiten könnte), welcher sich am besten an die gegebene Arbeitsspeichergröße anpasst und angeforderte Ressourcen in einem Durchlauf selbst nachlädt und (wenn auch nur halbwegs) intelligent cacht.
Das ganze ist natürlich nur sinnvoll wenn man wirklich viele Ressourcen zu verwalten hat - Spiele mit sehr kleinen Szenen können den Punkt vernachlässigen, aber es ist dennoch ganz gut, das im Hinterkopf zu behalten.
EDIT: Irgendwie lustig, was passieren kann wenn man "ne Weile" anderweitig beschäftigt ist :D
Beiträge: 1
Registriert: 03.03.2002, 17:51
MfG,
CC