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.

Lesezeit: 4 Min.
In Pocket speichern
vorlesen Druckansicht Kommentare lesen 30 Beiträge
Von
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.

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.

  • Zugriff auf alle Inhalte von heise+
  • exklusive Tests, Ratgeber & Hintergründe: unabhängig, kritisch fundiert
  • c't, iX, Technology Review, Mac & i, Make, c't Fotografie direkt im Browser lesen
  • einmal anmelden – auf allen Geräten lesen - monatlich kündbar
  • erster Monat gratis, danach monatlich 9,95 €
  • Wöchentlicher Newsletter mit persönlichen Leseempfehlungen des Chefredakteurs
GRATIS-Monat beginnen Jetzt GRATIS-Monat beginnen Mehr Informationen zu heise+