Announcement

Collapse
No announcement yet.

Seltsame Anzeigen der lokalen Variablen bei einfach For-Schleifen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Seltsame Anzeigen der lokalen Variablen bei einfach For-Schleifen

    Hallo

    Heute ist mir etwas beim Debuggen unter D6 folgender For-Schleife aufgefallen:
    for i:=1 to 10 do begin
    a[i] := random (10000);
    end;

    Laut Anzeige im Debug-Fenster Lokale Variable wird (Optimierung eingeschaltet) i von 10 nach 1 runtergezählt. Wird die Optimierung ausgeschaltet wird i so wie programmiert von 1 nach 10 hochgezählt.

    Wird in der Forschleife der laufindex i dem Caption einer Labelkomponente zugewiesen tritt dieser Effekt nicht auf!

    Noch merkwürdiger wird es wenn die Schleife nicht hochzählen sondern runterzählen soll. Dann wird i (lt. Debugg-Fenster) von -10 hochgezählt.

    Der Array wird allerdings in der gewünschen Weise gefüllt!

    Ist das nur ein Bug in der Anzeige des Debug-Windows oder schlägt da tatsächlich die Optimierung zu?

  • #2
    Das Thema hat AFAIK schon oft zu Diskussionen geführt. Es sollte aber nur eine Auswirkung der Optiomierung sein.<p>
    Schöne Grüße, Mairo Noac
    Schöne Grüße, Mario

    Comment


    • #3
      Das ist die Codeoptimierung des Compilers. Wenn ein Zählvariable in der Schleife nicht mehrfach verwendet wird, also wie in deinem Beispiel nur als Index in's Array dient dann hat der Optimierer ds Compilers die Möglichkeit die schnellste Zählvariante zu nutzen, in deinem Falle zählt er auf Null runter. Im Maschinencode gibt es spezielle Befehle die beim Dekrementieren gleichzeitig auf Null überprüfen. Wäre es nicht so so müsste der Code bis auf 10 hochzählen UND auf 10 überprüfen.<br>

      Auch negatives hochzählen ist üblich. Dabei wird das Array[] mit einem Offset von 10 berechnet, also Array[10 + I] während I < 0.<br>

      Es ist also alles ganz korrekt, einfach Optimierung ausschalten.<br>
      Oder ein if I = 5 then ; reinfügen.<br>

      Gruß Hage

      Comment

      Working...
      X