Speicherlücke: Wie dramatisch?
-
Hallo!
Ich habe eine grundlegende Frage: Wenn ich Speicher mit new allokiere, aber nie wieder freigebe, entsteht bekanntlich eine Speicherlücke. Ich gehe doch recht in der Annahme, daß diese Speicherlücke nur im Kontext meines Programms relevant ist und nach der Beendigung des selbigen nicht mehr existiert, sprich den RAM nicht nachhaltig belegt, oder?
mfg
Geordi
-
Doch.
Alles was Pointer zurückgibt (ob malloc oder new).
Bis zum Neustart halt.
-
Nicht ganz korrekt, das Betriebssystem reißt den Speicher schon wieder an sich, wenn der Prozess beendet ist.
-
Sgt. Nukem schrieb:
Doch.
Alles was Pointer zurückgibt (ob malloc oder new).
Bis zum Neustart halt.
Du hast die Frage nicht verstanden. Lies sie noch mal durch.
Die richtige Antwort lautet: Ja
-
Praktisch machen es alle Betriebssysteme, aber rein theoretisch muss das nicht so sein.
-
Optimizer schrieb:
Nicht ganz korrekt, das Betriebssystem reißt den Speicher schon wieder an sich, wenn der Prozess beendet ist.
Nananana... DAS kommt ja in erster Linie mal auf's OS an...
Und man kann auch unter DOS C++ coden...
Oder auf dem OS meines Bekannten...
-
Das schlimme an Speicherlöchern ist aber der Punkt, dass sich das alles summieren kann, vorallem wenn die Speicherlücken in Funktionen auftretten, die regelmäßig aufgerufen werden. Wenn nun das Programm entsprechen lange läuft, dann stürzt es ab oder wird unglaublich langsam.
Ein anderer Punkt, wenn du hier von new und delete sprichst. delete gibt nämlich nicht nur Speicher frei, sondern ruft auch den Dtor auf. Im Dtor macht man eben in normalem C++ die Aufräumarbeiten (zB. Handles schließen oder Buffer leeren). Wird der Dtor nicht aufgerufen, dann kann ziemlich viel daneben laufen.
Aber für die Speicherverwaltung nimmt man, nicht nur der Einfachheit halber, sondern auch im Bezug auf Exceptionsicherheit, Smart Pointer.