Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Achtung. Optimierung beim Compiler (https://www.delphipraxis.net/152027-achtung-optimierung-beim-compiler.html)

SirThornberry 9. Jun 2010 10:19

AW: Achtung. Optimierung beim Compiler
 
Die Frage war eben ob es überhaupt notwendig ist an der Stelle die Optimierung abzuschalten. Denn wie bereits erwähnt wurde sollte sich die Optimierung nicht derart auswirken das eine falsche Logic entsteht.

DelTurbo 9. Jun 2010 10:44

AW: Achtung. Optimierung beim Compiler
 
Zitat:

Zitat von SirThornberry (Beitrag 1027318)
Denn wie bereits erwähnt wurde sollte sich die Optimierung nicht derart auswirken das eine falsche Logic entsteht.

Macht es aber....

Namenloser 9. Jun 2010 10:46

AW: Achtung. Optimierung beim Compiler
 
Dann kannst du ja den Bug melden, und wenn du Glück hast, wird der Fehler dann in Delphi 2012 behoben :-D [/Zynismus]

himitsu 9. Jun 2010 10:53

AW: Achtung. Optimierung beim Compiler
 
Hab noch nie mitbekommen, daß es dadurch Probleme gibt.

Delphi-Quellcode:
program Project1;

{$APPTYPE CONSOLE}

var
  i: Integer;
  InUse: Array[0..20] of Boolean;
  Sr, S: String;
begin
  for i := 0 to 20 do
    InUse[i] := Boolean(Random(2));
  Sr := '';
  for i := 0 to 20 do begin
    // zählt problemlos rückwärts
    if not InUse[i] then Sr := Sr + 'j' else Sr := Sr + 'n';
  end;
  S := '';
  for i := 0 to 20 do begin
    WriteLn(i);
    if not InUse[i] then S := S + 'j' else S := S + 'n';
  end;
  WriteLn(Sr);
  WriteLn(S);
end.

blauweiss 9. Jun 2010 11:15

AW: Achtung. Optimierung beim Compiler
 
Zitat:

Zitat von DelTurbo (Beitrag 1027329)
Zitat:

Zitat von SirThornberry (Beitrag 1027318)
Denn wie bereits erwähnt wurde sollte sich die Optimierung nicht derart auswirken das eine falsche Logic entsteht.

Macht es aber....

Ich traue mich einfach wetten, daß nicht.
DelTurbo, schau bitte nochmal genau hin. Leider gibt es dazu x Threads, wo das gleiche gemeldet+widerlegt wurde, und nicht ein Thread, wo es dann tatsächlich so war.

Nichtsdestotrotz ist diese Schleifen-Runterzähl-"Optimierung" m.E. weitgehend sinnlos. Performance geht tatsächlich verloren durch schlechtes Algorithmendesign oder Peripheriezugriffe, während ein gesparter Assemblerbefehl pro Durchlauf in einer Schleife zu 99.9999999% marginal ist.

blauweiss

uligerhardt 9. Jun 2010 12:15

AW: Achtung. Optimierung beim Compiler
 
Zitat:

Zitat von DelTurbo (Beitrag 1027329)
Zitat:

Zitat von SirThornberry (Beitrag 1027318)
Denn wie bereits erwähnt wurde sollte sich die Optimierung nicht derart auswirken das eine falsche Logic entsteht.

Macht es aber....

Wie wäre es, wenn du mal ein kleines Beispielprogrämmchen bastelst, dass das mutmaßliche Fehlverhalten nachvollziehbar aufzeigt (und nicht nur im Debugger!)?

DelTurbo 10. Jun 2010 15:53

AW: Achtung. Optimierung beim Compiler
 
Zitat:

Zitat von uligerhardt (Beitrag 1027348)
Wie wäre es, wenn du mal ein kleines Beispielprogrämmchen bastelst, dass das mutmaßliche Fehlverhalten nachvollziehbar aufzeigt (und nicht nur im Debugger!)?

Einfach mal den ersten beitrag lesen. Sobald es zu einer ausgabe kommt rennt die schleife richtigrum. Soll ich hier screenshots anhängen oder was?

@blauweiss, ich merke schon Assembler ist nicht deine Welt. Ich denke mal das du nicht weisst wieviel Taktzyklen in einer grossen schleife verloren gehen, oder überhaupt weisst was schneller ist. Ein MOV AX,0 oder ein XOR AX,AX.

Ausserdem wollte ich keine diskusuion über Assembler lostreten. Ich wollte das nur mitteilen damit andere nicht den gleichen "fehler" suchen.

uligerhardt 10. Jun 2010 16:29

AW: Achtung. Optimierung beim Compiler
 
Zitat:

Zitat von DelTurbo (Beitrag 1027877)
Zitat:

Zitat von uligerhardt (Beitrag 1027348)
Wie wäre es, wenn du mal ein kleines Beispielprogrämmchen bastelst, dass das mutmaßliche Fehlverhalten nachvollziehbar aufzeigt (und nicht nur im Debugger!)?

Einfach mal den ersten beitrag lesen.

Du wirst's nicht glauben, aber das habe ich. :mrgreen:

Zitat:

Zitat von DelTurbo (Beitrag 1027877)
Sobald es zu einer ausgabe kommt rennt die schleife richtigrum. Soll ich hier screenshots anhängen oder was?

Nein. Ich werde aus deinen Ausführungen nur nicht schlau, ob du
  • nur über die verkehrte Anzeige von i im Debugger stolperst oder
  • ohne Debugger nachvollziehbare Fehler hast.

DelTurbo 10. Jun 2010 16:59

AW: Achtung. Optimierung beim Compiler
 
Liste der Anhänge anzeigen (Anzahl: 2)
Optimiert hat i den wert 88 nach der schleife. i wird runtergezählt.
Nicht Optimiert hat i den wert 3. i wird hochgezählt.

i ist im weiteren verlauf mein index auf ein anderes Array.

Na wenn das mal kein unterschied ist, weiss ich es nicht.

Edit: Das die bilder sooooo klein sind wusste ich nicht. Man kann es trotzdem lesen.
@uligerhardt, wenn ich ohne den debugger den fehler nicht gehabt hätte, hätte ich wohl kaum gesucht.

p80286 10. Jun 2010 17:12

AW: Achtung. Optimierung beim Compiler
 
Zitat:

Zitat von DelTurbo (Beitrag 1027900)
Optimiert hat i den wert 88 nach der schleife. i wird runtergezählt.
Nicht Optimiert hat i den wert 3. i wird hochgezählt.

i ist im weiteren verlauf mein index auf ein anderes Array.

Na wenn das mal kein unterschied ist, weiss ich es nicht.

Edit: Das die bilder sooooo klein sind wusste ich nicht. Man kann es trotzdem lesen.
@uligerhardt, wenn ich ohne den debugger den fehler nicht gehabt hätte, hätte ich wohl kaum gesucht.

Eigentlich hätte eine Warnung auftauchen müssen,daß das I nach dem Schleifendurchlauf undefiniert ist.
Hast Du vielleicht die Warnungen unterdrückt?
Ist mir auch einmal passiert, und danach hab ich "for i:=" durch "while i=" ersetzt.

Gruß
K-H


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:26 Uhr.
Seite 2 von 4     12 34      

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