After 3 months of coding weekends, my attempt to create a relocating nonblocking garbage collector in C++ has failed. It works in theory, but in practice the read barrier is pervasive and costly, and the threading invariants are incredibly tricky to maintain.
-
-
These two techniques suffice to take a conservative “snapshot of all liveness relations” at the start of concurrent GC, then mark and sweep in a background thread with no blocking, in regular C++ with no user or OS level hackery.
-
Hmm. Does any actual tracing (pointer chasing) happen? Or is it just a direct test of "out of the N ref<t>s which were pointing to this object/location, are any still alive"?
End of conversation
New conversation -
-
-
My roots were explicit, with no alloc lists, with bits set in ctors on every new() propagating to the parent object. A dumb recurring reflection system. Something old, where I was figuring out the look and feel from the user's PoV: https://gist.github.com/lostdj/4fe6f2c79924be4a437f84d7769648e0 …
-
Oh, I remember now: for the barriers the simple plan was to swap func ptrs that dereference GC ptrs, from noop to hijacking the control to rewrite the ptrs.
End of conversation
New conversation -
Loading seems to be taking a while.
Twitter may be over capacity or experiencing a momentary hiccup. Try again or visit Twitter Status for more information.