Einzelnen Beitrag anzeigen

Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.016 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#5

AW: Geshwindigkeit?> Nichts Vs Round, Round gewinnt, aber wieso?!

  Alt 19. Apr 2018, 18:02
Der String temp sorgt dafür, dass eine ganze Reihe an Operationen ausgeführt werden. Außerdem hast du Overhead durch das Stack-Frame, den CALL ansich, etc. Leider ist der Delphi Compiler sogar im Release mode so "dumm", dass er diese Anweisungen nicht raus-optimiert.
Selbst ohne den macht er noch stack gejuggle, was aber daran liegt dass für das Int64 Result platz auf dem Stack geschaffen wird, um am Ende in eax und edx zu packen.
Außerdem macht der Delphi Compiler keine gängigen Peephole Optimizations um unnötige vor/zurück Operationen zu eliminieren.

Kann man sehen, wenn man mal spaßeshalber auf Integer ändert (einfacheres assembly zum erklären):

Code:
Project1.dpr.15: begin
004CE91C 55               push ebp
004CE91D 8BEC            mov ebp,esp
Project1.dpr.18: end;
004CE91F 5D              pop ebp
004CE920 C20C00           ret $000c
1. ebp Register auf dem Stack sichern, weil
2. Wert aus esp in ebp gepackt wird, aber
3. Wert vom Stack wieder in ebp geholt wird
4. Funktion verlassen

Also effektiv ist nix passiert (und ja, das ist mit $O+,W- kompiliert).
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight

Geändert von Stevie (19. Apr 2018 um 18:19 Uhr)
  Mit Zitat antworten Zitat