Safe manual memory management

D Gay, R Ennals, E Brewer - … of the 6th international symposium on …, 2007 - dl.acm.org
D Gay, R Ennals, E Brewer
Proceedings of the 6th international symposium on Memory management, 2007dl.acm.org
We present HeapSafe, a tool that uses reference counting to dynamically verify the
soundness of manual memory management of C programs. HeapSafe relies on asimple
extension to the usual malloc/free memory management API: delayed free scopes during
which otherwise dangling references can exist. Porting programs for use with HeapSafe
typically requires little effort (on average 0.6% oflines change), adds an average 11% time
overhead (84% in the worst case), and increases space usage by an average of 13%. These …
We present HeapSafe, a tool that uses reference counting to dynamically verify the soundness of manual memory management of C programs. HeapSafe relies on asimple extension to the usual malloc/free memory management API: delayed free scopes during which otherwise dangling references can exist. Porting programs for use with HeapSafe typically requires little effort (on average 0.6% oflines change), adds an average 11% time overhead (84% in the worst case), and increases space usage by an average of 13%. These results are based on portingover half a million lines of C code, including perl where we found sixpreviously unknown bugs.Many existing C programs continue to use unchecked manual memorymanagement. One reason is that programmers fear that moving to garbage collection is too big a risk. We believe that HeapSafe is a practical way toprovide safe memory management for such programs. Since HeapSafe checks existing memory management rather than changing it, programmers need not worrythat HeapSafe will introduce new bugs; and, since HeapSafe does not managememory itself, programmers can choose to deploy their programs without HeapSafe if performance is critical (a simple header file allows HeapSafe programs to compile and run with a regular C compiler). In contrast, we foundthat garbage collection, although faster, had much higher space overhead, and occasionally caused a space-usage explosion that made the program unusable.
ACM Digital Library