Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Interessante Optimierung (https://www.delphipraxis.net/35330-interessante-optimierung.html)

CalganX 5. Dez 2004 17:11


Interessante Optimierung
 
Hi,
ich bin gerade ein wenig über die Compileroptimierung verwundert. Folgender Source (die mit * markierten Zeilen haben einen blauen Punkt von Delphi bekommen):
Delphi-Quellcode:
     repeat
{*}    frmSelectDrive.ShowModal;
{*}    FDrive := frmSelectDrive.DriveLetter;
{*}    FDatabaseFilename := FDrive + szDatabasePath;
{*}    FFilebase := FDrive + szFilebasePath;
{*}    if FileExists(FDatabaseFilename) then
         break;
{*}    case MessageDlg(szNoHDD060, mtError, [mbAbort, mbRetry], 0) of
         mrAbort:
           begin
{*}          Close;
             break; {<--}
           end;
       end;
   until false;
Die mit dem Pfeil markierte Zeile hat keinen Punkt, also könnte man sie doch eigentlich aus dem SourceCode rausnehmen, weil sie eigentlich ausgeführt wird. Wenn ich das aber machen, verfängt sich das Programm in der Endlosschleife (auch die Message-Box wird nicht immer angezeigt und das angezeigte Formular flackert).
Irgendwie optimiert der Compiler hier auf zwei verschiedene Art und Weisen. Aber wenn er die Zeile sowieso übergeht, dann ändert sie doch nichts, oder?

Chris

mirage228 5. Dez 2004 17:12

Re: Interessante Optimierung
 
Hi,

wie sieht denn der Assemblercode der beiden Varianten aus? Da wird wohl der Unterschied liegen...

mfG
mirage228

CalganX 5. Dez 2004 17:16

Re: Interessante Optimierung
 
Hi,
jetzt musst du mir aber auf die Sprünge helfen. ;) Wie zeige ich den an?

Chris

mirage228 5. Dez 2004 17:17

Re: Interessante Optimierung
 
Zitat:

Zitat von Chakotay1308
Hi,
jetzt musst du mir aber auf die Sprünge helfen. ;) Wie zeige ich den an?

Chris

Haltepunkt setzen oder manuell Anhalten -> Strg + Alt + C (oder Ansicht -> Debug -> CPU)

mfG
mirage228

CalganX 5. Dez 2004 17:23

Re: Interessante Optimierung
 
Hi,
achso. ;)

Mit break:
Code:
mov eax,esi
call TCustomForm.Close
lea edx,[ebp-$1c]
mov eax,$004c0e4c
Ohne break:
Code:
mov eax,esi
call TCustomForm.Close
[color=#ff0000]jmp $004c1993[/color]
lea edx,[ebp-$1c]
mov eax,$004c0e4c
Das heißt, es wird zwar wegoptimiert, aber trotzdem berücksichtigt? :gruebel: Das ist eben das, was ich nicht verstehe.

Chris

mirage228 5. Dez 2004 17:30

Re: Interessante Optimierung
 
Hi,

also die Punkte am Rand bedeuten nicht, dass die Anweisung (nicht) übernommen wurde.
Wenn da keine Punkte auftauchen, heisst es für den Compiler, dass die Anweisung "keinen Sinn macht" (sie zeigen also grobe Fehler)
Sprachkonstrukte und Keywords werden auch nicht gezählt. *

mfG
mirage228

*: Hat mir Robert_G gerade im Chat erzählt ;)

Robert_G 5. Dez 2004 17:34

Re: Interessante Optimierung
 
Mit grobe Fehler meinte ich Statements, die keinen Sinn machen. (Nach einer Minute schon alles verdreht. :lol: )
also:
Delphi-Quellcode:
  a := 1;// das macht keinen Sinn
  a := 2; //Es wird ja komplett von der zeile ersetzt
Eigentlich sollen sie dir nur zeigen, wo du einen funktionierenden Breakpoint setzen kannst.
Ein Breakpoint bei Break macht wohl nicht viel Sinn. :gruebel:

CalganX 5. Dez 2004 17:36

Re: Interessante Optimierung
 
Hi,
achso... ich dachte eigentlich, dass es sich bei den Punkten nur um übernommene Anweisungen handelt. :wall:

Na gut. Wieder was gelernt. ;)
Danke,
Chris

moritz 5. Dez 2004 17:36

Re: Interessante Optimierung
 
Mal eine Frage: Ich kenn diese Optimierung gar nicht :| Ich kenn nur die Warnungen à la "Auf * zugewiesener Wert wird nicht benutzt". Oder ist das neu in D8 / D2005?

:wiejetzt:

Robert_G 5. Dez 2004 17:39

Re: Interessante Optimierung
 
Achte mal in deinem D7 auf diese blauen Pünktchen neben dem Code Editor. ;)

moritz 5. Dez 2004 17:49

Re: Interessante Optimierung
 
Aaaaah :D Danke.
Kann ich mir die "Nicht-Blauen" Zeilen irgendwie zusammenfassen lassen?

Robert_G 5. Dez 2004 17:52

Re: Interessante Optimierung
 
Zitat:

Zitat von moritz
Aaaaah :D Danke.
Kann ich mir die "Nicht-Blauen" Zeilen irgendwie zusammenfassen lassen?

Da sollten eigentlich warnungen kommen und nunja ein Begin, end, else,... sind ja auch keine wirklichen Zeilen ;)

moritz 5. Dez 2004 17:54

Re: Interessante Optimierung
 
Okay, wieder was gelernt. Danke und sorry für Off-Topic.

fkerber 5. Dez 2004 18:11

Re: Interessante Optimierung
 
Hi!

Zitat:

Zitat von Robert_G
Da sollten eigentlich warnungen kommen und nunja ein Begin, end, else,... sind ja auch keine wirklichen Zeilen ;)

Seltsamerweise wird bei mir das end bei diesem Code mit Punkt versehen, dass begin allerdings nicht.

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
Showmessage('Te'+#39+'st');
end;
Ciao Frederic

Robert_G 5. Dez 2004 18:22

Re: Interessante Optimierung
 
stimmt, dort kannst du ja auch einen Breakpoint setzen.

fkerber 5. Dez 2004 18:25

Re: Interessante Optimierung
 
Hi!

Ja, klar, nur welchen Sinn hat es?
Und warum darf ich vor Ausführen der Showmessage keinen setzen?


Ciao Frederic

LarsMiddendorf 5. Dez 2004 18:29

Re: Interessante Optimierung
 
Die IF Anweisung würde ja einen Sprung bewirken um über den nicht ausgeführten Block zu springen, falls die Bedingung false ist. Die Break Anweisung erzeugt auch einen Sprung und der Compiler faßt die beiden Sprünge einfach zusammen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:33 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz