Name: Anonymous 2016-10-20 5:47
http://i.imgur.com/6d3NT7i.png
to start we call gc_root(x)
and it finds x's children and recursively copies them across using
gc_copy(a)
a new space is allocated in the to space for "a" which is copied
into that, the original "a" is replaced with a gc-redirect type
object,
then we have to copy and move all its children and update the
new "a"s references to point into the right places in to space.
when copying "c" over we hit a redirect, that tells us we don't
need to do a recursive copy of that child!
that's all there is to it
to start we call gc_root(x)
and it finds x's children and recursively copies them across using
gc_copy(a)
a new space is allocated in the to space for "a" which is copied
into that, the original "a" is replaced with a gc-redirect type
object,
then we have to copy and move all its children and update the
new "a"s references to point into the right places in to space.
when copying "c" over we hit a redirect, that tells us we don't
need to do a recursive copy of that child!
that's all there is to it