|
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Gast Gast
|
Verfasst am: 03.09.2002, 18:02 Titel: Wie lange "halten" Memory Leaks? |
|
|
Ich bin eben mit dem 6. Kapitel des Buches fertig geworden und dabei ist mir noch eine Frage unbeantwortet geblieben, auf die ich gerne eine Antwort hätte.
Es geht dabei um die Memory Leaks.
Wie lange bleibt der dadurch verschwendete Speicher unbrauchbar?
Bis zum Programmende?
Bis zum nächsten Windows-Neustart?
Oder bleibt der Speicher sogar für immer unbrauchbar (was ich allerdings für eher unwahrscheinlich halte)? |
|
Nach oben |
|
|
DarK Super JLI'ler
Anmeldedatum: 23.07.2002 Beiträge: 452 Wohnort: NRW Medaillen: Keine
|
Verfasst am: 03.09.2002, 19:11 Titel: |
|
|
soweit ich weiss bleibt der speicher nur bis zum schliesen des Programms unbrauchbar, aber ich bin selber "noob" , deswegen muss das nicht stimmen _________________ "Denken ist Arbeit, Arbeit ist Energie und Energie soll man sparen."
"Theorie ist, wenn man alles weiss, aber nichts funktioniert.
Praxis ist, wenn man nichts weiss, aber alles funktioniert.
Realität ist, wenn nichts funktioniert und keiner weiss warum."
"Es gehört ein wenig Mut dazu nicht das zu tun was ALLE tun" |
|
Nach oben |
|
|
Sören JLI Master Trainee
Anmeldedatum: 26.07.2002 Beiträge: 647 Wohnort: Bonn Medaillen: Keine
|
Verfasst am: 03.09.2002, 19:16 Titel: |
|
|
Hi,
die Frage habe ich auch mal gestellt!
Jetzt weiss ich, das Windows sich den reservierten Speicher merkt und am Ende des Programms wieder freigibt!
Sollte Windows das nicht machen, wird der Speicher beim runter fahren wieder freigegeben!
Du solltest aber trotzdem darauf achten, dasss du wieder alles freigibst! Es kann nämlich auch Fehlermeldungen geben, die nicht sonderlich gut aussehen. |
|
Nach oben |
|
|
AFE-GmdG JLI MVP
Alter: 45 Anmeldedatum: 19.07.2002 Beiträge: 1374 Wohnort: Irgendwo im Universum... Medaillen: Keine
|
Verfasst am: 03.09.2002, 19:44 Titel: |
|
|
Wie MiracleBoy schon sagte sollte der Speicher zum Programmende wieder freigegeben werden. Dies trifft aber nicht in allen Fällen zu:
Z.B. in DLL-Programmteilen, die ja bekantlich von Mehreren Anwendungen gleichzeitig benutzt werden können, wird einmal reservierter und nicht freigegebener Speicher frühstens beim Windows-Neustart wieder freigegeben. Doch wenn dein Programm viel Speicher reserviert, wieder freigibt, erneut reserviert und irgendwo ein Loch entsteht, Potentieren sich die Speicherlöcher und du bekommst langsam aber sicher ein Problem.
Deshalb bei solchen Operationen lieber 3 mal zu oft prüfen, als 1 mal zu wenig!
Auch wichtig: Windows vergibt nicht unendlich Handles - sondern "nur" ca. 4 Milliarden... Aufgeteilt auf die verschiedenen Elemente wie Fenster, Buttons, schriften, stifte und Pinsel (und viele andere Mehr) sind das pro Programm nicht sonderlich viel. _________________
CPP: | float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;} |
|
|
Nach oben |
|
|
Gast Gast
|
Verfasst am: 04.09.2002, 11:33 Titel: |
|
|
AFE-GmdG hat Folgendes geschrieben: | Doch wenn dein Programm viel Speicher reserviert, wieder freigibt, erneut reserviert und irgendwo ein Loch entsteht, Potentieren sich die Speicherlöcher und du bekommst langsam aber sicher ein Problem. |
Was meinst du mit "Problem"?
Hört sich übel an... |
|
Nach oben |
|
|
DaN00b JLI'ler
Anmeldedatum: 10.08.2002 Beiträge: 159
Medaillen: Keine
|
Verfasst am: 04.09.2002, 11:46 Titel: |
|
|
er meint damit das die performance deines programms rapide sinkt!!!
da kannste dann immer wieder programm neu starten oder gar pc... _________________ Carpe Diem - Seize the day - Nütze den Tag! |
|
Nach oben |
|
|
Michael JLI'ler
Anmeldedatum: 20.07.2002 Beiträge: 173 Wohnort: Münster / NRW Medaillen: Keine
|
Verfasst am: 04.09.2002, 14:09 Titel: |
|
|
ich vermute dass es eher um fehlermeldungen und abstürze geht. du kannst dir sicher sein, dass jedes speicherloch irgendwann mal einen absturz verursacht -> ja mehr löcher, desto höher die absturzwahrscheinlichkeit (zusätzlich zum "betriebssystem" ) _________________ Es geht auch ohne |
|
Nach oben |
|
|
Ciceri Super JLI'ler
Alter: 37 Anmeldedatum: 26.08.2002 Beiträge: 418 Wohnort: Wischhafen/in der nähe Hamburgs Medaillen: Keine
|
Verfasst am: 04.09.2002, 17:22 Titel: |
|
|
ey, wie sollen die memory leks eigentlich noch dasein, wenn window denn ganzen arbeitspeicher löscht, und wenn der pc aus ist, kann der pc nicht memory leks im arbeitsseicher haben, wegen strom halt
und frag jetzt nicht wie das mit der uhr geht, keine ahnung, ich glaube, dass am mainboard in der nähe des bios eine art uhr sein muss, da im bios ja auch ne uhr ist und diese auch läuft, wenn man keine festplatte angeschlossen hat _________________ www.z-software.de
Spieleentwicklung-Pur
Besuchen Sie uns. |
|
Nach oben |
|
|
Hazel JLI MVP
Alter: 39 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 04.09.2002, 19:19 Titel: |
|
|
Auf dem Motherboard is eine Batterie oder Akku, die das BIOS speist _________________ *click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
|
|
Nach oben |
|
|
AFE-GmdG JLI MVP
Alter: 45 Anmeldedatum: 19.07.2002 Beiträge: 1374 Wohnort: Irgendwo im Universum... Medaillen: Keine
|
Verfasst am: 04.09.2002, 23:13 Titel: |
|
|
Mit Problem meinte ich eigendlich nur den direkten Speicherbverbrauch einer Anwendung.
Doch dazu gleich mehr.
Das Bios hat eine Batterie oder einen Accu, der einen Winzigen Teil des Motherboards fortlaufend mit Strom versorgt, damit er nicht alle Einstellungen vergisst. Dazu zählt nicht nur die Urzeit, sondern auch Einstellungen zu den Com/LPT-Schnittstellen, zur Festplatte, Zu Speicher, Prozessor, Grafikkarte und so weiter.
Diese Batterie versorgt aber NICHT!!! den Ram-Speicher direkt, also vergisst der PC bei einem Reset, einem Klammergriff(Warmstart) oder wenn er ausgeschaltet wird alle Informationen im Ram. 100 Prozentig!
Zum Problem:
Jede Anwendung bekommt vom Betriebssystem unter Windows (ab 95 / NT 3.51) einen 4 Gigabyte Speicherbereich zugewiesen. Da kein Rechner hunderte oder gar tausende von Gigabyte Ram hat, ist das eine Virtuelle Zuweisung von Speicher, die in einer Tabelle festgehalten wird. Je 4 KB Speicher ergeben eine sogenannte Speicherseite (Page), die vom Ram auf einen Bereich der Anwendung gemappt wird. Das heißt, wenn ein Programm beim Start sagt, es brauchte mal schnell 6,53 KB Speicher, bekommt es 2 Speicherseiten. Diese können im Ram an ganz verschiedenen Stellen liegen, aber in der Anwendung erscheinen sie als ein Kompletter zusammenhängender Bereich. Windows selbst kümmert sich um die Adressenumwandlung von gemappten zu realen Speicher, dabei kann der Reale Speicher auch auf der Festplatte sein. (Auslagerungsdatei)
Wenn ein Programm jetzt Speicher reserviert (malloc und Co), und das Programm die Adresse vergisst, weil die Variable z.B. überschrieben wird, kann das Programm selbst nicht mehr auf diesen Speicherbereich zugreifen.
Auch Windows kann den Speicherbereich nicht anderen Programmen zuweisen, da er nicht wieder freigegeben wurde. Auf diese weise verschleudern viele Programme Speicherplatz im Megabytebereich! Bestes Beispiel ist eine ältere Version von ACDC (weiß nicht genau, ob ich das richtig geschrieben hab), das Speicherplatz zur Anzeige von Bildern reserviert. (Ist ja der Sinn des Programms). Dieser Speicher wird jedoch nicht wieder freigegeben, und so werden Megabyteweise Löcher produziert, die (in diesem Extremen Fall) leider auch nicht nach Beendigung des Programmes freigegeneb werden.Startet man das Programm ca. 10 mal, und schaut sich immer ein Verzeichnis mit sageb wir mal 100 Bildern an, ist der gesamte Physikalisch vorhandene Speicher aufgebraucht. Windows reagiert nur noch extrem langsam, ein Neustart ist zwingend notwendig.
Abstürze bedeuten Speicherlöcher nicht, solange ein Programm weiß, worauf es zugreifen kann und worauf nicht. Da es die Adressen nicht mehr kennt, greift es auf Löcher nicht zu, also daher rühren keine Abstürze.
Ich hoffe, ich konnte ein wenig Licht in's Dunkle bringen,
AFE-GmdG _________________
CPP: | float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;} |
|
|
Nach oben |
|
|
DaN00b JLI'ler
Anmeldedatum: 10.08.2002 Beiträge: 159
Medaillen: Keine
|
Verfasst am: 05.09.2002, 10:54 Titel: |
|
|
@afe also war meine kurz gefasste antwort das viele memory leaks der perforamnce schaden doch net so falsch oder?
zum bios: also batterie wird das kaum sein oder ahbt ihr schonmal ne batterie im bios auswechseln müssen und ich denke kaum das die genug saft hat um da jahrelang das motherboard mit strom zu füttern (auch wens nur die lebensnotwendigen prozesse sind...)
das werden schon akkus sein _________________ Carpe Diem - Seize the day - Nütze den Tag! |
|
Nach oben |
|
|
Hazel JLI MVP
Alter: 39 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 05.09.2002, 11:28 Titel: |
|
|
Eine Bekannte von mir musste sich eine neue für ihr Motherboard kaufen. _________________ *click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
|
|
Nach oben |
|
|
AFE-GmdG JLI MVP
Alter: 45 Anmeldedatum: 19.07.2002 Beiträge: 1374 Wohnort: Irgendwo im Universum... Medaillen: Keine
|
Verfasst am: 05.09.2002, 11:54 Titel: |
|
|
Soweit ich weiß sind das in letzter Zeit nur noch Batterien, früher waren es accus, da die Lebenszeit einer Batterie nicht ausreichte. Heutzutage ist die Computerentwicklung aber so schnell, daß davon ausgegangen wird, das eine Batterie ausreicht.
Eine solche Batterie reicht aber durchaus für 5 bis 10 Jahre... _________________
CPP: | float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;} |
|
|
Nach oben |
|
|
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
Powered by phpBB © 2001, 2005 phpBB Group Deutsche Übersetzung von phpBB.de
|