JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=23187f999a23abca9c4e831b58a5f4ffMedaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Wie lange "halten" Memory Leaks?

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Fragen, Antworten und Kritik
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Gast
Gast








BeitragVerfasst am: 03.09.2002, 18:02    Titel: Wie lange "halten" Memory Leaks? Antworten mit Zitat

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

BeitragVerfasst am: 03.09.2002, 19:11    Titel: Antworten mit Zitat

soweit ich weiss bleibt der speicher nur bis zum schliesen des Programms unbrauchbar, aber ich bin selber "noob" , deswegen muss das nicht stimmen Wink
_________________
"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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Sören
JLI Master Trainee



Anmeldedatum: 26.07.2002
Beiträge: 647
Wohnort: Bonn
Medaillen: Keine

BeitragVerfasst am: 03.09.2002, 19:16    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
AFE-GmdG
JLI MVP
JLI MVP


Alter: 44
Anmeldedatum: 19.07.2002
Beiträge: 1374
Wohnort: Irgendwo im Universum...
Medaillen: Keine

BeitragVerfasst am: 03.09.2002, 19:44    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Gast
Gast








BeitragVerfasst am: 04.09.2002, 11:33    Titel: Antworten mit Zitat

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... Confused
Nach oben
DaN00b
JLI'ler



Anmeldedatum: 10.08.2002
Beiträge: 159

Medaillen: Keine

BeitragVerfasst am: 04.09.2002, 11:46    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Michael
JLI'ler



Anmeldedatum: 20.07.2002
Beiträge: 173
Wohnort: Münster / NRW
Medaillen: Keine

BeitragVerfasst am: 04.09.2002, 14:09    Titel: Antworten mit Zitat

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" Wink )
_________________
Es geht auch ohne Wink
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
Ciceri
Super JLI'ler


Alter: 36
Anmeldedatum: 26.08.2002
Beiträge: 418
Wohnort: Wischhafen/in der nähe Hamburgs
Medaillen: Keine

BeitragVerfasst am: 04.09.2002, 17:22    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Hazel
JLI MVP
JLI MVP


Alter: 39
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 04.09.2002, 19:19    Titel: Antworten mit Zitat

Auf dem Motherboard is eine Batterie oder Akku, die das BIOS speist
_________________
*click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
AFE-GmdG
JLI MVP
JLI MVP


Alter: 44
Anmeldedatum: 19.07.2002
Beiträge: 1374
Wohnort: Irgendwo im Universum...
Medaillen: Keine

BeitragVerfasst am: 04.09.2002, 23:13    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
DaN00b
JLI'ler



Anmeldedatum: 10.08.2002
Beiträge: 159

Medaillen: Keine

BeitragVerfasst am: 05.09.2002, 10:54    Titel: Antworten mit Zitat

@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...) Wink
das werden schon akkus sein
_________________
Carpe Diem - Seize the day - Nütze den Tag!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Hazel
JLI MVP
JLI MVP


Alter: 39
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 05.09.2002, 11:28    Titel: Antworten mit Zitat

Eine Bekannte von mir musste sich eine neue für ihr Motherboard kaufen.
_________________
*click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
AFE-GmdG
JLI MVP
JLI MVP


Alter: 44
Anmeldedatum: 19.07.2002
Beiträge: 1374
Wohnort: Irgendwo im Universum...
Medaillen: Keine

BeitragVerfasst am: 05.09.2002, 11:54    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Fragen, Antworten und Kritik Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
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

Impressum