]> git.llucax.com Git - software/dgc/cdgc.git/commit
Make heap scanning precise
authorLeandro Lucarella <llucax@gmail.com>
Wed, 28 Jul 2010 02:40:46 +0000 (23:40 -0300)
committerLeandro Lucarella <llucax@gmail.com>
Wed, 28 Jul 2010 18:06:33 +0000 (15:06 -0300)
commit3f06cf8417c07b73c6e9671f379ec6f942f63866
treec5f9757cd6cc27d67c55557e855b734dfa31e44e
parent39229a694674a24ad2d3b9203f591198b7c60ca7
Make heap scanning precise

This patch[1] is based on the patch provided by Vincent Lang (AKA wm4),
which was based on a patch[2] by David Simcha, both published in the bug
3463[3]. The patch needs a patched Tango runtime (which is part of the
patch[1] for the GC) and a patched[4] DMD to work.

The patched DMD passes type information about pointer locations to
allocations, a PointerMap. The PointerMap has a member bits, which is an
array of size_t elements. The first element is the T.sizeof / size_t,
where T is the type being allocated. The next elements are bitmask
indicating words that should be scanned. After that, the next elements
store another bitmask with the information about pointers. A moving
collector could change the value of words marked as pointers, but not
words that should only be scanned (that words are not guaranteed to be
pointers), so a block could only be moved if it's only reachable by
pointers. The pointers information is not used yet by this patch, only the
scan bits are used.

The precise scanning algorithm is extremely simple, and needs a lot of
optimization, this patch was kept simple on purpose. Optimizations will
follow in separated patches.

A pointer to the type information is stored at the end of the allocated
blocks (only if the blocks should be scanned, blocks marked with NO_SCAN
don't need the type information). This wastes some space, and space that
then have to be scanned, which tends to decrease the performance quite
a bit.

[1] http://d.puremagic.com/issues/attachment.cgi?id=696
[2] http://d.puremagic.com/issues/attachment.cgi?id=489
[3] http://d.puremagic.com/issues/show_bug.cgi?id=3463
[4] http://d.puremagic.com/issues/attachment.cgi?id=700
rt/gc/cdgc/gc.d
rt/gc/cdgc/iface.d
rt/gc/cdgc/stats.d