Ich meine gehört zu haben
, dass im Optimierungsfalle Schleifen ggf. in die andere Richtung abgearbeitet werden, was zu 'Seiteneffekten' führen kann.
Ja, die zählen manchmal rückwärts auf 0 runter, aber beim Zugriff wird das umgerechnet und schon stimmt es wieder.
Egal, ob aus dem
Delphi-Quellcode:
for i := 1 to 9 do
Write(i);
der Compiler das macht.
Delphi-Quellcode:
for i := 8 downto 0 do
Write(9 - i);
Am Ende kommt das Gleiche bei raus.
Aber kommt wer auf die saudumme Idee nach der Schleife auf i zugreifen zu wollen, dann ist er selbst Schuld.
@jaenicke:
Mit 64 Bit stirbt der Inline-Assembler eh aus.
Und wenn i mal nicht in ebx liegt, dann hat dein Code eh ein Problem.
Wenn du im Assembler auf "i" zugreifst, dann weiß der Compiler in welchem Register/Stack die Variable liegt und dass hier nicht optimiert werden kann/soll.
Auch mit Pointern kann man da Mist bauen.
Delphi-Quellcode:
for i := 0 to 9 { step 2 } do begin
ShowMessage(i.ToString); // 0 2 4 6 8
Inc(PInteger(@i)^);
end;