Article View: maus.lang.tpascal
Article #9Re: Out of memory / Heap overflow error
From: Christopher Eltschka
Date: Thu, 16 Oct 1997 00:00
Date: Thu, 16 Oct 1997 00:00
53 lines
3634 bytes
3634 bytes
Heiko Bertsch wrote: > > Ich habe 2 Probleme in TP und w�rde mich freuen, wenn mir einer, am > besten per Mail, helfen k�nnte. > > 1.) Error 1: Out of memory > Was kann ich machen, wenn diese Fehlermeldung beim Starten (eines > gr��eren) Programmes erscheint. Soweit es geht habe ich schon Funktionen > und Proceduren in Uniten ausgelagert. > Nun, zunaechst einmal ueberpruefen, wie effizient der Speicher vom Programm eingesetzt wird. Insbesondere auf zu grosse MemAlloc-Bloecke achten (z.B. fuer GetImage nicht mehr Speicher anfordern, als ImageSize angibt) und Speicherloecher ueberpruefen (d.h., dass nichts auf dem Heap zurueckbleibt, was nicht mehr benoetigt wird). Insbesondere auch darauf achten, dass die FreeMem-Groesse exakt mit der GetMem-Groesse uebereinstimmt. Ausserdem sollte auch der verfuegbare Speicher ueberprueft werden (z.B. mit dem DOS-Programm mem). Eventuell wird der Speicher von zu vielen residenten Programmen/Treibern aufgefressen. Nuetzt dies alles nichts, sollte das Programm Overlays benutzen. Das heisst, dass der Compiler bestimmte Units (die ihm per $O mitgeteilt werden) nicht ins .EXE schreibt, sondern in eine eigene Overlay-Datei, und sie nur bei Bedarf in den Hauptspeicher laedt. Dies eignet sich z.B. gut fuer solche Units, die nur sehr selten gebraucht werden (das Nachladen erfordert natuerlich Zeit). Der Speichergewinn ergibt sich daraus, dass i.w. nur fuer eine Unit Platz gelassen werden muss (wieviel genau, kann man kontrollieren), da weitere Units einfach in denselben Speicherplatz kommen. Naeheres zu Overlays steht im Handbuch. > 2.) Error 203: Heap overflow error > Ich versuche in meinem Programm ein Art Erdbeben zu erzeugen, indem ich > den Bildschirm in 4 Teile aufteile und 4 mal per "getimage" und > "putimage" den Bildschirminhalt immer um ein paar Pixel in eine Richtung > bewege. Dabei st�rzt aber h�ufig das Programm mit dem oben genannten > Fehler ab. Was soll man da tun?? > Nun, zunaechst einmal auf den Speicher schauen: Wieviele dieser Teilbilder muessen *gleichzeitig* gespeichert werden? Koennte man ein Viertelbild verschieben, und dann den Speicher fuer das naechste Viertelbild "recyclen", wenn man die Reihenfolge geschickt waehlt? Amsonsten gelten natuerlich auch die Regeln von oben. Insbesondere auf Speicherloecher ist hier besonders zu achten; wenn in einer Schleife laufend Speicher angefordert, aber nie freigegeben wird, kann der Heap sehr schnell zu Ende gehen...
Technical Details
Message-ID:
<344648FA.1128F03A@physik.tu-muenchen.de>Path:
arc1-ca.pugleaf.net!unknown!not-for-mailReferences:
<61anfm$bc7$1@news02.btx.dtag.de>Show Full Headers
Complete Article Headers
X-Google-Language: GERMAN,ASCII X-Google-Thread: fd1d1,441608095b1c0ab7 X-Google-Attributes: gidfd1d1,public X-Google-Thread: 1006de,441608095b1c0ab7 X-Google-Attributes: gid1006de,public X-Google-Thread: 110467,441608095b1c0ab7 X-Google-Attributes: gid110467,public X-Google-Thread: 10263e,441608095b1c0ab7 X-Google-Attributes: gid10263e,public X-Google-Thread: 1360c6,441608095b1c0ab7 X-Google-Attributes: gid1360c6,public X-Google-Thread: 110930,441608095b1c0ab7 X-Google-Attributes: gid110930,public X-Google-Thread: 10a7f1,441608095b1c0ab7 X-Google-Attributes: gid10a7f1,public From: Christopher Eltschka <celtschk@physik.tu-muenchen.de> Subject: Re: Out of memory / Heap overflow error Date: 1997/10/16 Message-ID: <344648FA.1128F03A@physik.tu-muenchen.de> X-Deja-AN: 281454436 References: <61anfm$bc7$1@news02.btx.dtag.de> Distribution: world Organization: [posted via] Leibniz-Rechenzentrum, Muenchen (Germany) Newsgroups: maus.lang.tpascal,de.comp.lang.pascal.delphi,-lokal.programmieren,z-netz.sprachen.pascal,fido.ger.pascal,de.comp.lang.pascal,de.comp.lang.pascal.misc