Many high-level language compilers generate C code and then invoke a C compiler for
code generation, register allocation, stack management, and low-level optimization. To
date, most of these compilers link the resulting code against a conservative mark-sweep
garbage collector in order to reclaim unused memory. We introduce a new collector, MCC,
based on an extension of mostly-copying collection.
We analyze the various design decisions made in MCC and provide a performance comparison
to the most widely used conservative mark-sweep collector (the Boehm-Demers-Weiser
collector). Our results show that a good mostly-copying collector can outperform a mature
highly-optimized mark-sweep collector when physical memory is large relative to the live
data. A surprising result of our analysis is that cache behavior has a greater impact on
overall performance than either collector time, or allocation code.