(Semi) precise GC [was: Re: Std Phobos 2 and logging library?]
Robert Jacques
sandford at jhu.edu
Tue Apr 14 08:19:47 PDT 2009
On Tue, 14 Apr 2009 09:27:09 -0400, Frits van Bommel
<fvbommel at remwovexcapss.nl> wrote:
> Robert Jacques wrote:
>> On Tue, 14 Apr 2009 06:04:01 -0400, Frits van Bommel
>> <fvbommel at remwovexcapss.nl> wrote:
>>> Robert Jacques wrote:
>>>> it instead. (You'd have to create a fake ClassInfo for structs and
>>>> arrays.) Then the GC only has to track the start of each object (i.e.
>>>> the beginning of a block in the current GC). The advantage is that
>>>> this has 0 storage requirements for objects and on average < 4 bytes
>>>> for structs and arrays (thanks to the coarse block sizes of the
>>>> current GC).
>>>
>>> (that'd be < 8 for a 64-bit machine?)
>> Yes. The key point it's a per item cost which decreases with item
>> size, as opposed to a fixed 6.25% overhead when using a dense bitmask.
>
> I already mentioned the bitmask overhead could be bounded to
> pointer-size by falling back to a TypeInfo-based solution for memory
> blocks where that overhead would otherwise exceed (or match) the size of
> a pointer.
Sorry, I've been looking at non-frreelist based GCs where that
optimization is not available. Also, there are some limitations associated
with a variable length page header might be an issue. (i.e. a free page
with 512B blocks can't be re-purposed as a page with 256B blocks.)
>
>>> Using D2 structs with a moving GC would need some extra bookkeeping
>>> data anyway, to work out things like their postblit call.
>> Postblit is only called when generating an actual copy. For example it
>> is not called on assignment is the source is no longer used. So I don't
>> see any reason why it should, or it would be expected that postblit
>> would run when a struct was moved using the GC.
>
> Oh, I didn't know that. (I haven't done much of anything with D2, I
> mostly stick to D1)
> I just presumed they were like C++ copy constructors.
>
> As an aside: I can certainly think of some places where it would be
> useful to have them get called whenever the address changes...
> (Though "move constructors" would be even better for most of those cases)
Could you document this use case? (i.e. give some examples as I can't
think of any)
More information about the Digitalmars-d
mailing list