That's correct. Moving 64 bit values on a 32 bit machine results
in at least 2 machine instructions.
However I noticed that calling Length on Array in C# is inlined
whereas LongLenth is a function call even in release mode.
var length = array.Length;
000007FE8E453AF2 mov rax,qword ptr [rsp+20h]
000007FE8E453AF7 mov rax,qword ptr [rax+8]
000007FE8E453AFB mov dword ptr [rsp+30h],eax
var longLength = array.LongLength;
000007FE8E453B56 mov rax,qword ptr [rsp+20h]
000007FE8E453B5B cmp byte ptr [rax],0
000007FE8E453B5E mov rcx,qword ptr [rsp+20h]
000007FE8E453B63 call 000007FEEE082AB4
000007FE8E453B68 mov qword ptr [rsp+68h],rax
000007FE8E453B6D mov rax,qword ptr [rsp+68h]
000007FE8E453B72 mov qword ptr [rsp+40h],rax
On Sunday, 16 November 2014 at 16:03:30 UTC, Xinok wrote:
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.
We're missing too many details regarding how he ran his
benchmark. If he compiled and ran his code as 32-bit, that
could explain the discrepancy.