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).