how copying works (2)
state of GC process maintains two pointers
- free: points to location where next object should be relocated
- scan: points to object just relocated
broken hearts
- in the middle of the process, some cons cells on each side
- when a cons cell is moved, have to somehow update pointers to it
- do this by replacing old location with “broken heart”
forwarding address: location to which object has been moved
special tag to show that this is a forwarding address