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.

Artikel verschenken
In Pocket speichern vorlesen Druckansicht 30 Kommentare lesen
Speicherlecks finden
Lesezeit: 7 Min.
Von
  • Rainer Grimm
Inhaltsverzeichnis

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.

C++-Tricks

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.

Immer mehr Wissen. Das digitale Abo für IT und Technik.






Immer mehr Wissen. Das digitale Abo für IT und Technik.