Memory Leaks
-
unregs...
wenn unter windows und unix ein programm beendet, wird aller speicher freigegeben.
memleaks sind nur fuer die performance eines lange laufenden programmes problematisch, auf embedded-sachen genauso.
-
Dann kann man einen Computer ja mit einer ganz einfachen Schleife die ganze Performance nehmen ? zB so:
int* pointer = new int; for(;;){ pointer = new int; }Über die Antwort bin ich mir übrigens noch nicht klar, hier geht so viel verschiedenes rum...
-
Irgendwann ist der Speicher voll (das könnt bei der Größe ne Weile dauern) und dann sagt dir dein (hoffentlich halbwegs modernes) OS sowas wie "Nö, nix gibts" und bricht das Programm ab. Der gesamte angeforderte Speicher wird dann wieder frei gegeben und steht wieder zur freien Verfügung. Und der Arbeitsspeicher verliert sowieso seinen Inhalt wenn man neu startet. Kritisch sind Speicherlecks nur dann, wenn du beispielsweise einen Server programmiert hast, der einige Monate ununterbrochen laufen soll.
-
Wenn man richtig C++ programmiert ist es voll schwierig Memory Leaks zu machen.
-
hinweis schrieb:
Wenn man richtig C++ programmiert ist es voll schwierig Memory Leaks zu machen.
Falsch!
Bei kleinen Projekten am anfang ist das schwer weil man da den überblick hat.
In großen Projekten passiert wenn man nicht aufpasst sowas schnell, das benutzter Speicher nicht wieder freigegeben wird.
-
Storm.Xapek.de schrieb:
In großen Projekten passiert wenn man nicht aufpasst sowas schnell, das benutzter Speicher nicht wieder freigegeben wird.
Wenn man Objekte dazu benutzt kann eigentlich nichts passieren, oder?
mfg.
-
Storm.Xapek.de schrieb:
Falsch!
Bei kleinen Projekten am anfang ist das schwer weil man da den überblick hat.
In großen Projekten passiert wenn man nicht aufpasst sowas schnell, das benutzter Speicher nicht wieder freigegeben wird.Falsch!

Bei konsequenter Benutzung von Containern und Smart-Pointern ist es theoretisch unmöglich, Speicherlecks zu produzieren. In der Praxis sieht es allerdings so aus, dass dies nicht immer so ohne weiteres möglich ist bzw. zu wenig Gebrauch davon gemacht wird.
-
Wer alle Ressourcen die einer Freigabe bedürfen in Stack-Objekte kapselt und auch mal nen {}-Block innerhalb einer Funktion verwendet, kann so gut wie nicht mehr vergessen eine Ressource wieder freizugeben.
-
Na, zumindest meine Frage ist beantwortet. Danke euch

-
poroblem schrieb:
ein leak bleibt für immer. Wenn man eine Festplatte defragmentiert kann man sie sogar sehen. Aber ich glaube mit VSC++ professional gibt es eine möglichkeit sie wider zu "retten"
Jup. Klassischer Fall von Write-Through.
-
Gibt es eigentlich ne moeglichkeit festzustellen, wieviel ein Programm an speicher reserviert hat, bevor es vom OS abgebrochen wurde (unter linux)?
Edit: hab jetzt mal das Programm von Djinndrache getestet, bei mir hat es nicht mal 10 Sekunden gedauert, da hat das OS mit folgender Nachricht reagiert:
a.out(1059) malloc: *** vm_allocate(size=1069056) failed (error code=3)
a.out(1059) malloc: *** error: can't allocate region
a.out(1059) malloc: *** set a breakpoint in szone_error to debug
a.out(1059) malloc: *** vm_allocate(size=1069056) failed (error code=3)
a.out(1059) malloc: *** error: can't allocate region
a.out(1059) malloc: *** set a breakpoint in szone_error to debug
a.out(1059) malloc: *** vm_allocate(size=1069056) failed (error code=3)
a.out(1059) malloc: *** error: can't allocate region
a.out(1059) malloc: *** set a breakpoint in szone_error to debug
a.out(1059) malloc: *** vm_allocate(size=1069056) failed (error code=3)
a.out(1059) malloc: *** error: can't allocate region
a.out(1059) malloc: *** set a breakpoint in szone_error to debug
terminate called recursively
Abort trapund das Programm abgebrochen!