Registriert: Mi Jan 31, 2007 18:32 Beiträge: 150
Programmiersprache: Pascal
In der Roten Zeile ist das Problem wenn ich dort nen Haltpunkt setzte und dann mir den Wert von i angucke ist er beim ersten mal 8...Kann das überhaupt durch einen Fehler im Quellcode verursacht werden wenn ja wäre nett wenn ihr mir den Fehler sucht
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Na ja. Funktioniert der Code denn?
Ich tippe mal darauf, dass du Optimierungen im Delphi aktivierst hast? Dadurch optimiert Delphi den Code und stellt diesesn Mitunter etwas um. Schleifen gehen dann intern häufiger von Max bis 0 oder so. Und wenn du dir das jetzt im Debugger anschaust, dann kann es sein, dass einige Werte nicht verfügbar sind, weil sie sich nur noch im Prozessorregister befinden oder halt so komisch umgeformt wurden.
Wenn du die Optimierung deaktivierst, dann bildet Delphi deinen Code genau so ab wie du ihn geschrieben hast. Mitunter ist dieser dann aber durchaus langsamer.
Die Schleife wird aber nicht wirklich umgedreht, die Laufvariable läuft nur rückwärts. In der Schleife werden die Indexe dann anders berechnet. Das liegt daran, dass durch das Umdrehen a) ein einfacher Counter in der CPU benutzt werden kann (Register C) und ein JZ (JumpZero) einer der schnellsten Microcodes ist. Wenn die Schleife nicht umgedreht würde, müsste jedesmal die Abbruchbedingung nach A geladen werden und mit einem JE (JumpEqual) die Schleife verlassen werden. Dieser JE braucht ein Vielfaches von JZ (Prozessortakte), da hier intern (ALU) eine Differenz gebildet und ein JZ durchgeführt wird. Dieses Verhalten ist also völlig normal und der Compiler tut dies mbMn auch ohne Optimierung.
Ein ähnliches Verhalten lässt sich übrigens bei Case-Anweisungen feststellen. Die Cases werden aufsteigend ihrer Wertigkeit nach geordnet. Das ist auch der Grund warum in Delphi anders als in C die Anweisung nach Abarbeitung des Cases grundsätzlich verlässt.
_________________ Manchmal sehen Dinge, die wie Dinge aussehen wollen, mehr wie Dinge aus, als Dinge.
<Esmerelda Wetterwax>
Es kann vorkommen, dass die Nachkommen trotz Abkommen mit ihrem Einkommen nicht auskommen und umkommen.
Mitglieder in diesem Forum: 0 Mitglieder und 4 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.