(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