array traversal

Ary Manzana ary at esperanto.org.ar
Wed Mar 28 12:28:59 PDT 2007


Stewart Gordon escribió:
> "Dan" <murpsoft at hotmail.com> wrote in message 
> news:euecda$16oq$1 at digitalmars.com...
>> 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
>>>> }
> <snip>
>> 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.
> 
> No it isn't.  The ++ operator (and similarly --, +, -, +=, -=) applied 
> to a pointer works in the units of the size of the data type it points to.
> 
>> 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.
> 
> What on earth is a u/v pipe?
> 
> Stewart.

http://en.wikipedia.org/wiki/Pentium

(read: Major changes from the 486)



More information about the Digitalmars-d mailing list