A Refcounted Array Type

monarch_dodra via Digitalmars-d digitalmars-d at puremagic.com
Thu Mar 5 08:50:03 PST 2015


On Thursday, 5 March 2015 at 16:19:09 UTC, Marc Schütz wrote:
> On Thursday, 5 March 2015 at 15:20:47 UTC, monarch_dodra wrote:
>> On Monday, 23 February 2015 at 22:15:54 UTC, Walter Bright 
>> wrote:
>>> private:
>>>   E[] array;
>>>   size_t start, end;
>>>   int* count;
>>
>> What is the point of keeping start/end? Aren't those baked 
>> into the array slice? Not storing start end means not having 
>> to do index arithmetic (minor), reducing struct size (always 
>> nice). But more importantly, it allows implicit (and 
>> conditional) bounds checking (awesome), which actually runs 
>> regardless anyways.
>>
>> Or did I miss something?
>
> `GC.free()` needs a pointer to the start of the allocated 
> block; it will not release memory if it gets an interior 
> pointer. But as far as I can see, one pointer that stores the 
> original address should be enough.

Still, you shouldn't need "end", and bounds checking would "just
work".


More information about the Digitalmars-d mailing list