Hi,
damit eventuell andere nicht in diese falle laufen poste ich mal was passiert wenn man die Optimierung an hat.
Eine gaaanz fiese sache ist, das schleifen rückwärts laufen können. Das spart ein cmp. In meinem fall ist das voll in die hose gegangen.
Beispiel:
Ich habe ein InUse = Array[0..100] of Boolean. Das wird von mehreren Threads genutzt. Und auch wieder frei gegeben. Mein Sourcecode war wie folgt.
Delphi-Quellcode:
for i:=0 to 100 do
begin
if NOT InUse[i] then ....
end;
Ziel war es von "unten" einen leeren Slot zu suchen. Ich habe fast eine Stunde gebraucht bis ich rausfand das die schleifen rückwärts läuft. Man kann es nur im Assembler sehen.
Ändert man den Sourcecode wie folgt ab, läuft die schleife wieder richtigrum. Also von 0 bis 100
Delphi-Quellcode:
for i:=0 to 100 do
begin
WriteLn(i);
if NOT InUse[i] then ....
end;
Ich weiss nicht inwie weit diese sache bekannt ist. Auch habe ich eine frage dazu. Gibt es flags/parameter womit man teile des programms von der optimierung ausschliessen kann?
Gruss und danke im voraus