## Reachability-Based Orthogonal Persistence for C, C++, and Other Intransigents

#### Abstract

We describe how reachability-based orthogonal persistence can be supported even in uncooperative implementations of languages such as C and C++, where there is no support for accurate discovery of transient roots. Such ambiguous transient roots preclude the usual copying approach to promotion of objects from transient to persistent by reachability from well-known persistent roots [Atkinson et al. 1983]. Our approach extends Bartlett’s mostly-copying garbage collector [Bartlett 1988; 1989] to manage both transient objects and resident persistent objects, and to perform the reachability closure necessary for stabilization in a mostly-copying fashion. The only requirement, necessary anyway for persistence, is accurate discovery of pointers in heap-allocated objects. Such support can be obtained through direct compiler assistance, extracted from debugging information, or provided explicitly by the programmer. We also consider how the garbage collector can inform the buffer manager of persistent pages that are likely candidates for removal.

@inproceedings{Hosking+1997GC,
author = {Hosking, Antony L. and Novianto, Aria P.},
title = {Reachability-Based Orthogonal Persistence for C, C++, and
Other Intransigents},
booktitle = {OOPSLA Workshop on Garbage Collection and Memory Management},
series = {GC},
year = {1997},
month = {October},