Version 5 (modified by diatchki, 8 years ago) (diff)


GHC Commentary: Garbage Collecting CAFs

Files: rts/sm/GC.c

Constant Applicative Forms, or CAFs for short, are top-level values defined in a program. To avoid memory leaks caused by CAFs we need to detect when all values/functions that could potentially refer to a CAF are gone, and so it is safe to deallocate the CAF.

To achieve this, all static objects are linked together with the static link field. During GC we maintain traverse the static objects to see which are still live. Closures that might refer to CAFs contain a Static Reference Table (SRT) which indicates what static objects are still needed.