AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Konvertierung nach D2009

Ein Thema von EWeiss · begonnen am 25. Apr 2009 · letzter Beitrag vom 26. Apr 2009
Antwort Antwort
Seite 2 von 2     12   
jbg

Registriert seit: 12. Jun 2002
3.481 Beiträge
 
Delphi 10.1 Berlin Professional
 
#11

Re: Konvertierung nach D2009

  Alt 26. Apr 2009, 14:47
Zitat von EWeiss:
Sehe keinen großen unterschied die DLL ist genauso groß egal welche variante ich erstelle.
Eigentlich sollte doch die Released kleiner sein oder ?
Die Debuginfos stehen in den DCU Dateien. Und auch bei "Debug" wird mit aktivierter Code-Optimierung gearbeitet. Das Ergebnis der Kompilierung ist als genau das selbe für die Ausgabedatei, unterscheidet sich aber in den Zwischendateien (*.dcu, *.dcp).


Zitat:
Das Unicode zeuch addiert mir mal locker 100KB mehr in die DLL.
Was kein Wunder ist, wenn aus einem simplen 13 Bytes großen "Length(String)" in Delphi 2007 sage und schreibe 40 Bytes werden.

Nur mal so zum Vergleich. Folgender Code kompiliert in Delphi 2007 und Delphi 2009:
Delphi-Quellcode:
function InStr(const S: string; Ch: Char): Integer;
begin
  for Result := 1 to Length(S) do
    if S[Result] = Ch then
      Exit;
  Result := 0;
end;
Delphi 2007:
Code:
Unit1.pas.70: begin
004A78DC 56               push esi
Unit1.pas.71: for Result := 1 to Length(S) do
004A78DD 8BC8             mov ecx,eax
004A78DF 85C9             test ecx,ecx
004A78E1 7405             jz $004a78e8
004A78E3 83E904           sub ecx,$04
004A78E6 8B09             mov ecx,[ecx]
004A78E8 85C9             test ecx,ecx
004A78EA 7E0F            jle $004a78fb
004A78EC BE01000000       mov esi,$00000001
Unit1.pas.72: if S[Result] = Ch then
004A78F1 3A5430FF        cmp dl,[eax+esi-$01]
004A78F5 7406             jz $004a78fd
Unit1.pas.73: Exit;
004A78F7 46               inc esi
Unit1.pas.71: for Result := 1 to Length(S) do
004A78F8 49               dec ecx
004A78F9 75F6             jnz $004a78f1
Unit1.pas.74: Result := 0;
004A78FB 33F6             xor esi,esi
Unit1.pas.75: end;
004A78FD 8BC6             mov eax,esi
004A78FF 5E              pop esi
004A7900 C3               ret
Delphi 2009:
Code:
Unit1.pas.105: begin
00461E24 55               push ebp
00461E25 8BEC            mov ebp,esp
00461E27 51               push ecx
00461E28 53               push ebx
00461E29 56               push esi
00461E2A 57               push edi
00461E2B 8BFA            mov edi,edx
00461E2D 8945FC          mov [ebp-$04],eax
00461E30 8B45FC          mov eax,[ebp-$04]
00461E33 E8B035FAFF      call @UStrAddRef
00461E38 33C0             xor eax,eax
00461E3A 55               push ebp
00461E3B 68B71E4600       push $00461eb7
00461E40 64FF30           push dword ptr fs:[eax]
00461E43 648920           mov fs:[eax],esp
Unit1.pas.106: for Result := 1 to Length(S) do
00461E46 8B45FC          mov eax,[ebp-$04]
00461E49 85C0             test eax,eax
00461E4B 7416             jz $00461e63
00461E4D 8BD0             mov edx,eax
00461E4F 83EA0A          sub edx,$0a
00461E52 66833A02         cmp word ptr [edx],$02
00461E56 740B            jz $00461e63
00461E58 8D45FC          lea eax,[ebp-$04]
00461E5B 8B55FC          mov edx,[ebp-$04]
00461E5E E8A12FFAFF      call @InternalUStrFromLStr
00461E63 85C0             test eax,eax
00461E65 7405             jz $00461e6c
00461E67 83E804           sub eax,$04
00461E6A 8B00             mov eax,[eax]
00461E6C 8BD8             mov ebx,eax
00461E6E 85DB            test ebx,ebx
00461E70 7E2D            jle $00461e9f
00461E72 BE01000000       mov esi,$00000001
Unit1.pas.107: if S[Result] = Ch then
00461E77 8B45FC          mov eax,[ebp-$04]
00461E7A 85C0             test eax,eax
00461E7C 7416             jz $00461e94
00461E7E 8BD0             mov edx,eax
00461E80 83EA0A          sub edx,$0a
00461E83 66833A02         cmp word ptr [edx],$02
00461E87 740B            jz $00461e94
00461E89 8D45FC          lea eax,[ebp-$04]
00461E8C 8B55FC          mov edx,[ebp-$04]
00461E8F E8702FFAFF      call @InternalUStrFromLStr
00461E94 663B7C70FE      cmp di,[eax+esi*2-$02]
00461E99 7406             jz $00461ea1
Unit1.pas.108: Exit;
00461E9B 46               inc esi
Unit1.pas.106: for Result := 1 to Length(S) do
00461E9C 4B              dec ebx
00461E9D 75D8             jnz $00461e77
Unit1.pas.109: Result := 0;
00461E9F 33F6             xor esi,esi
Unit1.pas.110: end;
00461EA1 33C0             xor eax,eax
00461EA3 5A              pop edx
00461EA4 59               pop ecx
00461EA5 59               pop ecx
00461EA6 648910           mov fs:[eax],edx
00461EA9 68BE1E4600       push $00461ebe
00461EAE 8D45FC          lea eax,[ebp-$04]
00461EB1 E83A35FAFF      call @UStrClr
00461EB6 C3               ret
00461EB7 E9FC24FAFF      jmp @HandleFinally
00461EBC EBF0             jmp $00461eae
00461EBE 8BC6             mov eax,esi
00461EC0 5F              pop edi
00461EC1 5E              pop esi
00461EC2 5B              pop ebx
00461EC3 59               pop ecx
00461EC4 5D              pop ebp
00461EC5 C3               ret

Mir wird bei Delphi 2009 immer übel, wenn ich die CPU Anzeige aufmache. Das "const" für Strings hat seine Bedeutung verloren. Um das ganze zu umgehen, habe ich mittlerweile die Compiler-Option {$STRINGCHECKS ON/OFF} auf OFF gestellt. Meine EXE-Dateien müssen nicht mit alten, noch AnsiString nutzenden C++Builder Modulen kommunizieren. Leider ist die RTL und VCL mit {$STRINGCHECKS ON} kompiliert, was das Ganze so oder so aufbläht und stark verlangsamt.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#12

Re: Konvertierung nach D2009

  Alt 26. Apr 2009, 16:45
Ist interessant das ganze mal aus anderer perspektive zu betrachten.

Na bedingt durch das Unicode zeuch hab ich noch mit ganz anderen dingen zu kämpfen
Unter VB ist es jetzt nicht mehr so einfach die DLL zu nutzen.

gruss Emil
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:56 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz