GrowthTracker: Diagnosing Unbounded Heap Growth in C++ Software

Unbounded growth of heap memory degrades performance and eventually causes program failure. Traditional memory leaks are the most commonly recognized, but not the only cause of this issue. Large software systems use many aggregate data structures that can grow arbitrarily, and application behavior t...

Ausführliche Beschreibung

Gespeichert in:
Bibliographische Detailangaben
Hauptverfasser: Hill, Erik, Tracy, Daniel J., Brown, Sheldon
Format: Tagungsbericht
Sprache:eng
Schlagworte:
Online-Zugang:Volltext bestellen
Tags: Tag hinzufügen
Keine Tags, Fügen Sie den ersten Tag hinzu!
Beschreibung
Zusammenfassung:Unbounded growth of heap memory degrades performance and eventually causes program failure. Traditional memory leaks are the most commonly recognized, but not the only cause of this issue. Large software systems use many aggregate data structures that can grow arbitrarily, and application behavior that produces unbounded growth of these structures is common. This growth can remain undetected by both memory leak and staleness detection tools. In this paper, we present an approach for reliably identifying aggregate data structures that can grow without bound over the lifetime of a program. Our solution tracks all aggregates over the lifetime of the program and utilizes heuristics to identify non-convergent growth. Our diagnostic method continuously reduces false positives and false negatives during execution, producing more accurate reports for as long as it is allowed to continue execution. In addition, we present techniques to utilize this method in large, pre-existing C++ software without requiring extensive code modification. Our tool identified data structures with this issue in Google's Chrome web browser and Apple's Safari browser among others.
ISSN:2159-4848
2771-3091
DOI:10.1109/ICST.2013.39