Registriert seit: 10. Jun 2003
Ort: Berlin
9.582 Beiträge
Delphi 11 Alexandria
|
AW: DLL mit FPC/Codetyphon erheblich kleiner als unter Delphi
5. Mai 2016, 21:20
Ein weiterer wichtiger Punkt ist der generierte Code von FPC. Der ist einfach schlanker und direkter. Bei Delphi gibt es Tonnen von unnötigen Register saves und restores, die den Code langsam machen und die EXE/ DLL aufblähen.
Ein konkretes Beispiel wäre schön. Wenn ich so den generierten Code vergleiche, kann ich davon nichts sehen. Ein einfaches Beispiel:
Delphi-Quellcode:
var
a: string;
b: Integer;
begin
b := 42;
a := IntToStr(b);
ShowMessage(a);
end;
Delphi:
Code:
Unit93.pas.30: begin
00000000006B6B80 55 push rbp
00000000006B6B81 4883EC30 sub rsp,$30
00000000006B6B85 488BEC mov rbp,rsp
00000000006B6B88 48C7452800000000 mov qword ptr [rbp+$28],$0000000000000000
00000000006B6B90 48894D40 mov [rbp+$40],rcx
00000000006B6B94 48895548 mov [rbp+$48],rdx
00000000006B6B98 90 nop
Unit93.pas.31: b := 42;
00000000006B6B99 C745242A000000 mov [rbp+$24],$0000002a
Unit93.pas.32: a := IntToStr(b);
00000000006B6BA0 488D4D28 lea rcx,[rbp+$28]
00000000006B6BA4 8B5524 mov edx,[rbp+$24]
00000000006B6BA7 E88493D7FF call IntToStr
Unit93.pas.33: ShowMessage(a);
00000000006B6BAC 488B4D28 mov rcx,[rbp+$28]
00000000006B6BB0 E89B3BF3FF call ShowMessage
00000000006B6BB5 90 nop
Unit93.pas.34: end;
00000000006B6BB6 488D4D28 lea rcx,[rbp+$28]
00000000006B6BBA E8217BD5FF call @UStrClr
00000000006B6BBF 488D6530 lea rsp,[rbp+$30]
00000000006B6BC3 5D pop rbp
00000000006B6BC4 C3 ret
Lazarus / FPC:
Code:
unit1.pas:37 begin
000000010002C390 55 push %rbp
000000010002C391 4889e5 mov %rsp,%rbp
000000010002C394 488d6424c0 lea -0x40(%rsp),%rsp
000000010002C399 48894df0 mov %rcx,-0x10(%rbp)
000000010002C39D 488955f8 mov %rdx,-0x8(%rbp)
000000010002C3A1 48c745e800000000 movq $0x0,-0x18(%rbp)
000000010002C3A9 90 nop
unit1.pas:38 b := 42;
000000010002C3AA c745e02a000000 movl $0x2a,-0x20(%rbp)
unit1.pas:39 a := IntToStr(b);
000000010002C3B1 8b45e0 mov -0x20(%rbp),%eax
000000010002C3B4 488d4de8 lea -0x18(%rbp),%rcx
000000010002C3B8 89c2 mov %eax,%edx
000000010002C3BA e8c11a0200 callq 0x10004de80 <SYSUTILS_$$_INTTOSTR$LONGINT$$ANSISTRING>
unit1.pas:40 ShowMessage(a);
000000010002C3BF 488b4de8 mov -0x18(%rbp),%rcx
000000010002C3C3 e828201100 callq 0x10013e3f0 <SHOWMESSAGE>
unit1.pas:37 begin
000000010002C3C8 90 nop
000000010002C3C9 4889e9 mov %rbp,%rcx
000000010002C3CC e89fffffff callq 0x10002c370 <fin$0>
unit1.pas:41 end;
000000010002C3D1 90 nop
000000010002C3D2 488d6500 lea 0x0(%rbp),%rsp
000000010002C3D6 5d pop %rbp
000000010002C3D7 c3 retq
Sebastian Jänicke Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
|
|
Zitat
|