Many high-level language compilers generate C code and then invoke a C compiler to do
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 mostly-copying collection, and characterize the conditions that favor
such a collector over a mark-sweep collector. In particular we demonstrate that
mostly-copying collection outperforms conservative mark-sweep under the same conditions
that accurate copying collection outperforms accurate mark-sweep: Specifically, MCC meets
or exceeds the performance of a mature mark-sweep collector when allocation rates are
high, and physical memory is large relative to the live
data.