Delphi-PRAXiS
Seite 1 von 2  1 2      

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. ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:41 Uhr.
Seite 1 von 2  1 2      

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