Durch C++-Anwendungen verursachte Speicherlecks aufspüren
Speicherlecks beeinträchtigen die Performance von Programmen. Es gibt verschiedene Methoden, um sie aufzuspüren und Speicher richtig zu verwalten.
- Rainer Grimm
Häufig kommt es in C++-Applikationen vor, dass Speicher angefordert, aber nicht mehr freigegeben wird. Gerade bei Anwendungen, die über einen langen Zeitraum laufen und häufig Speicher anfordern und freigeben, können auch kleine Speicherlecks zu einem großen Problem werden – die automatische Freigabe des Speichers beim Schließen der Applikation ist dabei keine Option.
Die Idee der folgenden Analyse ist es, Speicherlecks zu finden. Zwei Iterationen sind dafür notwendig, die verschiedene Implementierungen der Operatoren new
und delete
verwenden. Im ersten Schritt wird geprüft, ob es im Code Speicherlecks gibt. In der zweiten Iteration gelingt es dann, die Speicherlecks exakt zu identifizieren. Das geht leider nicht ohne einen hässlichen Trick: ein Makro.
Ein Programm, das häufig Speicher anfordert und wieder freigibt, ist Startpunkt der Analyse. Die Frage, die das kleine Programm aufwirft: Gibt es zu jedem new
einen korrespondierenden delete
-Aufruf? Um diese Frage zu beantworten, kommen verschiedene Varianten von überladenen new-
und delete-
Operatoren zum Einsatz (siehe Kasten), die in den Headerdateien MyNew.hpp, MyNew2.hpp und MyNew3.hpp gespeichert sind.