Heap allocation and internal pointers

monarch_dodra monarchdodra at gmail.com
Mon Jan 20 11:50:24 PST 2014


On Monday, 20 January 2014 at 19:48:01 UTC, Steven Schveighoffer 
wrote:
> On Mon, 20 Jan 2014 11:35:10 -0500, Dmitry Olshansky 
> <dmitry.olsh at gmail.com> wrote:
>
>> 19-Jan-2014 20:18, monarch_dodra пишет:
>
>>>
>>> My usecase is pretty trivial: A linked list. This is often 
>>> implemented
>>> as a "single" sentinel that serves as both 
>>> pre-head/post-tail. When the
>>> list is empty, the sentinel simply points to itself.
>>>
>>
>> You could use internal pointers for this case as long as:
>> a) The struct will never get copied and/or moved. No pass by 
>> value, only pointers.
>> b) It's out of GC control and in particular GC-allocated 
>> built-in arrays.
>
> I think this is somewhat too general. It can be GC allocated, 
> even GC-array allocated. The GC will not move around your array 
> unexpectedly without updating the pointers.
>
> What you cannot do is array *operations* that might copy the 
> data for that reference/slice. So aside from the original 'new' 
> call, you cannot use .dup, .idup, .length +=, ~ or ~=, .reserve.
>
> That being said, avoiding using an array is likely to be a 
> better choice :)
>
> As a hint, dcollections does exactly what you want to do, and 
> I've never had a problem with it.
>
> -Steve

Most awesome. Thanks for all the info. It's basically what I 
*thought*, but wanted confirmation from people with actual 
knowledge.


More information about the Digitalmars-d mailing list