* wie optimal erzeugt der Compiler den Code
* wie schnell sind die einzelnen verwendeten CPU-Befehle
* was bietet die jeweilige Platform eigentlich für Befehle
* wie gut läuft der Speicherzugriff
* und wie gut die Abarbeitung dieses Codes
Win32 muß langsamer sein, denn bei 64 Bit rechnet die CPU, mit einem "Assembler"-Befehl,
während es unter 32 Bit eine Funktion macht, also viele Assembler-Befehle.
[edit]
Nee, beim ADD wird es direkt gemacht, aber auch mit mehreren Befehlen, denn die 32 Bit-CPU kann ja nur mit 32 Bit rechnen.
MUL, DIV, MOD waren aber Funktionen. (z.B. siehe __llmul in der System.pas)
Delphi-Quellcode:
// Win32
mov eax,[ebp-$10]
mov edx,[ebp-$0c]
add eax,$7b
adc edx,$00
jno $006663d9
call $00498228
mov [ebp-$10],eax
mov [ebp-$0c],edx
// Win64
add qword ptr [rbp+$28],$7b
jno TForm4.FormCreate + $20
call @IntOver
Und wenn man jetzt noch die Überlauf- und Bereichsprüfung wieder deaktiviert, welche nun seit Kurzem standardmäßig aktiv sind.
Delphi-Quellcode:
mov eax,[ebp-$10]
mov edx,[ebp-$0c]
add eax,$7b
adc edx,$00
mov [ebp-$10],eax
mov [ebp-$0c],edx
versus
add qword ptr [rbp+$08],$7b
PS, bezüglich der Optimierung.
Bei gewissen Rechenoperationen kann es "anders" einfacher gehn.
z.B. aus einem
i * 2
kann oft einfach ein
i shl 1
werden.
Und ein "einfacher" Bit-Shift geht auch mit weniger CPU-Takten, als ein "aufwendiges" mathematisches Rechnen.