Plug: Automatically Tolerating Memory Leaks in C and C++ Applications Gene Novark Emery D. Berger Benjamin G. Zorn Dept. of Computer Science Microsoft Research University of Massachusetts Amherst One Microsoft Way Amherst, MA 01003 Redmond, WA 98052
[email protected],
[email protected] [email protected] Abstract While conservative garbage collection [6] has been used to com- Memory leaks remain a significant challenge for C and C++ devel- bat memory leaks in deployed C/C++ applications, it is not a com- opers. Leaky applications become slower over time as their work- plete solution. First, garbage collection can impose significant run- ing set grows, triggering paging, and can eventually become un- time and memory overhead [14], making it unsuitable for many ap- responsive. At the same time, memory leaks remain notoriously plications. Second, conservative garbage collection can cause legal difficult to debug, and comprise a large number of reported bugs in C/C++ programs to fail or exhibit unbounded memory consump- mature applications. Existing approaches like conservative garbage tion [2,4,5, 15]. Critically, even when garbage collection does collection can only remedy leaks of unreachable objects. In addi- not compromise performance or correctness, it can not resolve all tion, they can impose unacceptable runtime or space overheads, or memory leaks. A garbage collector can only reclaim objects whose cause legal C/C++ applications to fail or retain excessive memory. last reference has been removed. If the objects remain reachable, a This paper presents Plug, a runtime system for C/C++ appli- garbage collector cannot reclaim them. cations that allows applications to deliver high performance in the This paper makes the following contributions: face of both reachable and unreachable memory leaks.