Einzelnen Beitrag anzeigen

Pixel

Registriert seit: 23. Aug 2016
26 Beiträge
 
#24

AW: PosEx? Oder doch lieber Pos? - Performance!

  Alt 24. Aug 2016, 19:12
Also ich bin kein ASM-Experte aber hab mir das ganze mal im Debugger angeschaut.

Bilder sind im Anhang.

Bei dem Bild "pos" sieht man den kompletten ASM-Code der pos-funktion

Die Stringsuche beginnt bei Adresse 00402FE8 "REPNE SCAN BYTE PTR..."
Der ASM-Befehl sucht quasi solange nach einem String bis ECX 0 ist.

Bei Bild "posex_main" fällt erstmal auf dass die Funktion anders anfängt. Von der Stringsuchschleife von pos() sieht man erstmal nichts. Aber: z.B. gibt es bei PosEx() ja den 3. Parameter "Offset" der default auf 1 gesetzt ist. Das sieht man auf dem Bild schön bei Adresse 00407CB1 "CMP ECX,1" und "JNZ SHRT findPosi.00407CC1".

Wenn man das Offset unberührt lässt (also bei default 1) dann wird der jump JNZ - "jump if not zero" auch nicht genommen und wir landen bei Adresse 00407CBA "CALL findPosi.0040398C". Wenn man dem folgt landet man bei Bild "posex2" und jetzt erkennt man, dass wir dort dann wieder bei der Funktion pos() sind.

Also tl;dr: posEx() hat einen jump, ein CMP und ein JNZ mehr als pos() und ist somit langsamer . posEx() kann allerdings schneller sein, wenn man das Offset setzt. Ach und: Das ganze hab ich aus Delphi 7

Edit:// Sorry ich wollte eigtl. meinen Beitrag oben editieren.
Miniaturansicht angehängter Grafiken
pos.png   posex_2.png   posex_main.png  

Geändert von Pixel (24. Aug 2016 um 19:19 Uhr)
  Mit Zitat antworten Zitat