Wenn ich - ohne es zu wissen - ein Speicherleck programmiert habe und die Anwendung beendet wird, wird dann der ausgelaufene Speicher freigegeben?
Antworten
Zu viele Anzeigen?Ja, ein "Speicherleck" ist einfach Speicher, auf den ein Prozess keinen Verweis mehr hat und den er daher nicht mehr freigeben kann. Das Betriebssystem behält den gesamten einem Prozess zugewiesenen Speicher im Auge und gibt ihn frei, wenn dieser Prozess beendet wird.
In den allermeisten Fällen gibt das Betriebssystem den Speicher frei - so wie es bei den normalen "Flavors" von Windows, Linux, Solaris usw. der Fall ist. Es ist jedoch zu beachten, dass in spezialisierten Umgebungen wie verschiedenen Echtzeitbetriebssystemen der Speicher möglicherweise nicht freigegeben wird, wenn das Programm beendet wird.
Das Betriebssystem, das Ihr Programm ausführt, bereinigt in der Regel Speicher, der nicht explizit freigegeben wird, und Handles, die nicht explizit geschlossen werden, aber dies wird vom C++-Standard nicht garantiert. Es kann vorkommen, dass einige eingebettete Geräte Ihre Speicherlecks nicht aufräumen.
Das heißt, dass Windows und alle Linux-Distributionen, die ich je gesehen habe, Speicherlecks beseitigen.
Sie können jedoch leicht eine riesige Schleife von Speicherlecks erstellen, um es selbst zu testen. Beobachten Sie, wie Ihr RAM-Verbrauch wächst und schließen Sie dann Ihr Programm. Sie werden sehen, dass der RAM-Verbrauch wieder sinkt.
Eine weitere Überlegung bei der Verwendung von C++ ist, dass, wenn Sie nicht löschen Sie Ihre Heap-Speicher zugeordnet dann Ihre Destruktoren sind auch nicht aufgerufen werden. Manchmal treten auch andere Nebenwirkungen auf, wenn die Destruktoren nicht aufgerufen werden.
Normalerweise ja. Einige Systeme unterstützen jedoch Dinge wie gemeinsam genutzte Speicherblöcke, die nicht automatisch freigegeben werden, wenn ein Programm beendet wird. Die meisten behalten einen Referenzzähler und löschen ihn, wenn alle Programme, die ihn geöffnet haben, beendet werden, aber einige wenige tun das nicht (z.B. hatte 16-Bit-Windows ein paar Typen von Elementen, die auch dann zugewiesen blieben, wenn nichts mehr auf sie verwies -- obwohl es normalerweise aus anderen Gründen abstürzte, bevor sich genug davon ansammelte, um ein Problem zu verursachen...)
- See previous answers
- Weitere Antworten anzeigen