Zitat von
jaenicke:
[...]Am optimalsten sieht das Ergebnis aus, wenn man direkt High benutzt, dann spart man auch noch das -1 [...]
Das ist nur die halbe Warheit, denn eigentlich sieht das ganze dann so aus:
Code:
00453340 8B45FC mov eax,[ebp-$04]
00453343 E8E421FBFF call @DynArrayHigh
@DynArrayHigh:
00404E88 E8F3FFFFFF call @DynArrayLength
00404E8D 48
dec eax ; Da ist dein -1 wieder ;)
00404E8E C3 ret
00404E8F 90 nop
00453348 85C0 test eax,eax
Edith: Die man koennte length() noch optimieren:
length():
Delphi internes length()
Code:
length():
Ticks: ~9
MS: 3.35*10^-5
length__()
Wie das delphi interne length() nur ohne nil check
Delphi-Quellcode:
function Length__(
var Obj):Integer;
asm
mov eax, [eax - 4]
end;
Code:
length__():
Ticks: ~8
MS: 3.38*10^-5
length_()
Als inline variante
Delphi-Quellcode:
function Length_(var Obj):Integer; inline;
begin
result := pDWord(DWord(Obj) - 4)^;
end;
Code:
length_():
Ticks: ~1
MS: 2.94*10^-5