size_t for length on x64 will make app slower than on x86?

ponce via Digitalmars-d digitalmars-d at puremagic.com
Mon Nov 17 00:47:03 PST 2014


On Sunday, 16 November 2014 at 13:39:24 UTC, FrankLike wrote:
> Many old projects need move from x86 to x64,but the 'length' 
> type is size_t,it will change on x64,so a lot of work must to 
> do.but I find some info which is help for d:
> http://www.dotnetperls.com/array-length.
> it means:
>   test length and longlength, and found 'test longlength' is  
> slower than 'test length'.
>
>   0.64 ns   Length
>   2.55 ns   LongLength
>
> I love D.So I don't want my app on x64 slower than on x86.
>
> Hope change in 2.067.
>
> Thank you all.

At least on x86, I would recommand to cast size_t in "int" almost 
everytime for speed.

- signed overflow is undefined behaviour and optimizers can take 
advantage of it.
- 64-bits instructions on x86 takes more bytes to encode. i-cache 
and instruction decoding suffer.
- 32-bits instructions on x86 fill the upper range with zeroes, 
so that false dependencies are eliminated.

For these reasons 32-bits ops on x86 are more often than not 
faster than "native"-sized int, opposite what intuition would 
tell. For better or worse, int has been made the fastest integer 
type by chip-makers.


More information about the Digitalmars-d mailing list