Einzelnen Beitrag anzeigen

Win32.API

Registriert seit: 23. Mai 2005
312 Beiträge
 
#13

Re: for-Schleife gegen über while-Schleife

  Alt 21. Mär 2009, 13:09
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
  Mit Zitat antworten Zitat