Array start index

Bastiaan Veelo via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Tue Feb 7 14:04:48 PST 2017


On Tuesday, 7 February 2017 at 20:33:35 UTC, Ali Çehreli wrote:
> On 02/07/2017 02:11 AM, Bastiaan Veelo wrote:
>
> > We do not need to take measures against the GC?
>
> Of course we have to and the struct that I wrote is illegal 
> because it is self-referencing through the _ptr member. (D has 
> the right to move structs around, making my _ptr potentially 
> pointing to an illegal address.)

Gosh am I glad I brought that up, and for people like you hanging 
out in the learn group. Thanks for pointing this out!

> This optimization cannot work if the array is a static array 
> inside the same struct. It would work with a dynamic array but 
> then it would probably be slower than applying the *(ptr+index) 
> technique.

You mean slower than the _payload[index - first] technique? Is 
that because of heap memory versus stack memory?

Am I correct that the reason that a dynamic array would work is 
because it is allocated independently from the struct, meaning 
that its address stays the same even if the struct is moved? We 
could .reserve a dynamic array in initialize() to prevent it 
being resized.

Thanks again.
Bastiaan.


More information about the Digitalmars-d-learn mailing list