Vote on region allocator

Robert Jacques sandford at jhu.edu
Fri Sep 23 20:51:36 PDT 2011


On Fri, 23 Sep 2011 23:30:34 -0400, dsimcha <dsimcha at yahoo.com> wrote:
> On 9/23/2011 11:25 PM, Robert Jacques wrote:
>> On Fri, 23 Sep 2011 15:53:46 -0400, Jonathan M Davis
>> <jmdavisProg at gmx.com> wrote:
>>
>> No. I cannot build an efficient and safe appender on this API.
>
> The resize() fix you requested is going to get implemented.  I just
> haven't actually added it yet.  The allocate() fix with block
> attributes, however, is not because:
>
> 1.  You can just call addRegion/removeRegion yourself after allocating,
> so it just adds bloat.
>
> 2.  A major purpose of RegionAllocator and probably several other
> allocators is to avoid the GC lock.  I don't want anything that could
> lock to be implicit unless the only alternative is failure.
>

A) If the allocator is the GC, then I've just taken the GC lock twice.
B) If the allocator is stack like, then I might not necessarily need to use addRegion, at least for some internal structures.
C) If region allocator, for example, maintained a second, GC-region segmented stack, then I can have GC tracing without taking the GC lock.

In terms of attributes, you might generalize this to:

NO_SCAN      // I had no pointers
REGION_SCAN  // I have pointers internal to the region
GC_SCAN      // I have pointers to general memory

D) There's performance gains in knowing that REGION_SCAN is equivalent to NO_SCAN or GC_SCAN


More information about the Digitalmars-d mailing list