array traversal
Dan
murpsoft at hotmail.com
Wed Mar 28 11:33:14 PDT 2007
Stewart Gordon Wrote:
> "BCS" <ao at pathlink.com> wrote in message
> news:ce0a3343870c8c939107e7e1a1e at news.digitalmars.com...
> <snip>
> > I think that options he is taking about are these
> > for(T* ptr = &start; ptr !is &stop; ptr++)
> > {
> > T value = *ptr
> > }
> >
> > vs.
> >
> > for(int i = 0; i< length; i++)
> > {
> > T value = ptr[i];
> > }
> >
> > only the second ever uses a multiplication
>
> And even then not necessarily - some compilers may optimise one form to the
> other.
>
> Stewart.
>
Hmm... let me think of how that looks in ASM. The first one is wrong, because you're only ptr++, it should be ptr += OFFSET. Apart from that, you're right the first code looks mildly better in ASM.
Looping through by adding to the pointer instead of adding to the array index and performing a 'lea'.
The good news is that D *should be* optimizing this out, and it ultimately only costs a half cycle which may either align or throw off the u/v pipes - something more important than 1/2 a cycle.
I wonder if Walter has it aligning the pipes as appropriate?
More information about the Digitalmars-d
mailing list