![]() |
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:
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).
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; 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 |
Re: Interessante Optimierung
Hi,
wie sieht denn der Assemblercode der beiden Varianten aus? Da wird wohl der Unterschied liegen... mfG mirage228 |
Re: Interessante Optimierung
Hi,
jetzt musst du mir aber auf die Sprünge helfen. ;) Wie zeige ich den an? Chris |
Re: Interessante Optimierung
Zitat:
mfG mirage228 |
Re: Interessante Optimierung
Hi,
achso. ;) Mit break:
Code:
Ohne break:
mov eax,esi
call TCustomForm.Close lea edx,[ebp-$1c] mov eax,$004c0e4c
Code:
Das heißt, es wird zwar wegoptimiert, aber trotzdem berücksichtigt? :gruebel: Das ist eben das, was ich nicht verstehe.
mov eax,esi
call TCustomForm.Close [color=#ff0000]jmp $004c1993[/color] lea edx,[ebp-$1c] mov eax,$004c0e4c Chris |
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 ;) |
Re: Interessante Optimierung
Mit grobe Fehler meinte ich Statements, die keinen Sinn machen. (Nach einer Minute schon alles verdreht. :lol: )
also:
Delphi-Quellcode:
Eigentlich sollen sie dir nur zeigen, wo du einen funktionierenden Breakpoint setzen kannst.
a := 1;// das macht keinen Sinn
a := 2; //Es wird ja komplett von der zeile ersetzt Ein Breakpoint bei Break macht wohl nicht viel Sinn. :gruebel: |
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 |
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: |
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 07:18 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