AGB  ·  Datenschutz  ·  Impressum  







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

Compiler optimiert nicht richtig

Ein Thema von igel457 · begonnen am 12. Feb 2007 · letzter Beitrag vom 12. Feb 2007
Antwort Antwort
Benutzerbild von igel457
igel457

Registriert seit: 31. Aug 2005
1.622 Beiträge
 
FreePascal / Lazarus
 
#1

Compiler optimiert nicht richtig

  Alt 12. Feb 2007, 17:05
Hallo,

ich habe ein komisches Problem mit dem Compiler. Und zwar wird bei folgendem Code einiges wegoptimiert:

Delphi-Quellcode:
for i := 0 to FEngine.FList.Count - 1 do
begin
  FEngine.FList[i].Collision2;
  FEngine.CollisionDone := true;
  if FEngine.CollisionDone then
  begin
    break; <--- Diese Zeile wird nicht compiliert
  end;
end;
Kann ich mir irgendwo eine "Begründung" her holen? Oder hatte schonmal jemand ähnliche Probleme?
CollisionDone ist ein Property und folgendermaßen Deklariert:
property CollisionDone:boolean read FCollisionDone write FCollisionDone; Danke für eure Hilfe,
Igel457
Andreas
"Sollen sich auch alle schämen, die gedankenlos sich der Wunder der Wissenschaft und Technik bedienen, und nicht mehr davon geistig erfasst haben als die Kuh von der Botanik der Pflanzen, die sie mit Wohlbehagen frisst." - Albert Einstein
  Mit Zitat antworten Zitat
Nicolai1234

Registriert seit: 21. Feb 2004
1.008 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Compiler optimiert nicht richtig

  Alt 12. Feb 2007, 17:11
Was soll die Zeile denn bewirken?
Also jetzt konkret auf das Programm bezogen?

Irgendwie verstehe ich den Sinn der ganzen Sache noch nicht so..
  Mit Zitat antworten Zitat
Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#3

Re: Compiler optimiert nicht richtig

  Alt 12. Feb 2007, 17:12
Zitat von igel457:
ich habe ein komisches Problem mit dem Compiler. Und zwar wird bei folgendem Code einiges wegoptimiert:
Was steht hier?
Delphi-Quellcode:
for i := 0 to FEngine.FList.Count - 1 do
begin
  FEngine.FList[i].Collision2;
  FEngine.CollisionDone := true;
  if FEngine.CollisionDone then
  begin
    break; <--- Diese Zeile wird nicht compiliert
  end;
end;
Das steht da:
Delphi-Quellcode:
if Engine.List.Count > 0 then
begin
  Engine.List[0].Collision2;
  Engine.CollisionDone := true;
end;
btw: Warum benutzt du überall die Felder direkt? Eine property, die mit dem Feld als read-clause deklariert wird, hat keinerlei Overhead gegenüber dem Feld direkt.
Aber auf der anderen Seite hast du später die Möglichkeit den Getter zu ändern. Außerdem sehen die ganzen FXXX furchtbar hässlich aus.
Robert Giesecke
I’m a great believer in “Occam’s Razor,” the principle which says:
“If you say something complicated, I’ll slit your throat.”
  Mit Zitat antworten Zitat
Benutzerbild von igel457
igel457

Registriert seit: 31. Aug 2005
1.622 Beiträge
 
FreePascal / Lazarus
 
#4

Re: Compiler optimiert nicht richtig

  Alt 12. Feb 2007, 17:22
Zitat von Elvis:
Das steht da:
Delphi-Quellcode:
if Engine.List.Count > 0 then
begin
  Engine.List[0].Collision2;
  Engine.CollisionDone := true;
end;
Irgendwie verstehe ich dich jetzt nicht richtig. Ich hänge mal ein kleines Bild von meinem Problem an. Das zweite Break habe ich nur zu Demonstrationszwecken eingefügt.

Ich suche jetzt schon seit Stunden nach dem Fehler...

Mit der direkten verwendung der Felder kommt das noch vom DelphiX. Ich habs umgeändert...
Miniaturansicht angehängter Grafiken
temp_128.png  
Andreas
"Sollen sich auch alle schämen, die gedankenlos sich der Wunder der Wissenschaft und Technik bedienen, und nicht mehr davon geistig erfasst haben als die Kuh von der Botanik der Pflanzen, die sie mit Wohlbehagen frisst." - Albert Einstein
  Mit Zitat antworten Zitat
BenjaminH

Registriert seit: 14. Okt 2004
Ort: Freiburg im Breisgau
713 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Compiler optimiert nicht richtig

  Alt 12. Feb 2007, 17:32
Das wird wegoptimiert, weil der Fall nie eintritt. Ganz einfach deshalb weil du direkt vor der Abfrage selbst dafür sorgst, dass es immer true ist. Genauso, wie Elvis das schon geschrieben hat.
Benjamin
  Mit Zitat antworten Zitat
Benutzerbild von igel457
igel457

Registriert seit: 31. Aug 2005
1.622 Beiträge
 
FreePascal / Lazarus
 
#6

Re: Compiler optimiert nicht richtig

  Alt 12. Feb 2007, 17:37
Diese Zeile mit dem True habe ich nur zum Testen hinzugefügt.
Allerdings funktioniert es Anscheinend doch richtig (also auch ohne dieses CollisionDone = true), obwohl die Zeile nie Ausgeführt wird.
Der Fehler den ich habe scheint doch wo anders her zu kommen... Ich wollte halt einen Haltepunkt auf diese Zeile setzen und war geschockt als ich gesehen habe, dass diese nicht ausgeführt wird.
Andreas
"Sollen sich auch alle schämen, die gedankenlos sich der Wunder der Wissenschaft und Technik bedienen, und nicht mehr davon geistig erfasst haben als die Kuh von der Botanik der Pflanzen, die sie mit Wohlbehagen frisst." - Albert Einstein
  Mit Zitat antworten Zitat
Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#7

Re: Compiler optimiert nicht richtig

  Alt 12. Feb 2007, 17:43
Zitat von igel457:
Der Fehler den ich habe scheint doch wo anders her zu kommen... Ich wollte halt einen Haltepunkt auf diese Zeile setzen und war geschockt als ich gesehen habe, dass diese nicht ausgeführt wird.
Deshalb deaktiviert man beim Debugging ja auch die Optimierungen.
Und ein Rebuild anstatt einem Recompile wirkt manchmal wahre Wunder. Besonders nach Änderung der Compiler-Optionen ist es zwingend notwendig einen Rebuild aller Dateien zu machen, die davon betroffen sind.
Optimierungen ausschalten und dann F9 oder Ctrl F9 drücken ist also 'ne Luftnummer.

Die Optimierungen des Compilers sind normalerweise nicht destruktiv, soll heißen er ändert nicht wirklich etwas an deinem Programmfluss, er wirft nur Dinge raus, die unnötig sind, fasst Operationen zusammen oder ändert die Reihenfolge von Operationen wenn es keinen Einfluss auf das Programm hat.
Robert Giesecke
I’m a great believer in “Occam’s Razor,” the principle which says:
“If you say something complicated, I’ll slit your throat.”
  Mit Zitat antworten Zitat
Antwort Antwort


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 09:22 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