Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.169 Beiträge
 
Delphi 12 Athens
 
#8

AW: Seltsames Phänomen: Unterschied zwischen Integer und Int64

  Alt 9. Jan 2021, 14:20
Die Frage ist nur: Warum funktioniert es unter 32Bit nicht?
Es ist ein komplett anderer Compiler.
Im Win32 wird Int64 auch noch "emuliert", denn die CPU hat ja nur 32 Bit, also das +1 berechnet nicht die CPU mit "einem" Assemblerbefehl, sondern es erledigt Delphi, über zwei Int32. Teilweise über monströse Funktionen in der System.pas.

Delphi-Quellcode:
// Win32
Unit1.pas.29: X := X + 1;
0060E3A9 8B45F0 mov eax,[ebp-$10]
0060E3AC 8B55F4 mov edx,[ebp-$0c]
0060E3AF 83C001 add eax,$01
0060E3B2 83D200 adc edx,$00
0060E3B5 8945F0 mov [ebp-$10],eax
0060E3B8 8955F4 mov [ebp-$0c],edx

// Win64
Unit1.pas.29: X := X + 1;
000000000070ADA8 4883450801 add qword ptr [rbp+$08],$01
Delphi-Quellcode:
{ 64-bit Integer helper routines }
{$IF defined(CPU386) and defined(ASSEMBLER)}
procedure __llmul;
procedure __lldiv;
procedure __lludiv;
procedure __llmod;
procedure __llmulo;
procedure __llumulo;
procedure __lldivo;
procedure __llmodo;
procedure __llumod;
procedure __llshl;
procedure __llushr;
{$ENDIF}
In Win32 sieht der Aufruf also quasi so aus
lTest.SetTo2(lCount).SetI(__lladd(lCount, 1)).WriteInt; // __lladd ist aber eine Inline-Funktion vom Compiler
und hier wird das __lladd wohl zu früh ausgeführt, vor SetTo2.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 9. Jan 2021 um 14:35 Uhr)
  Mit Zitat antworten Zitat