Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Compiler-Fehler: "Downto" statt "To" (https://www.delphipraxis.net/42742-compiler-fehler-downto-statt.html)

gordon freeman 23. Mär 2005 11:03


Compiler-Fehler: "Downto" statt "To"
 
Hi Leute,

hab mir gerade mal die Werte von i in:

Delphi-Quellcode:
var BA : array[97..252] of integer;

(...)

procedure TForm2.BALeeren;
var i:integer;
begin
  for i:=97 to 252 do
    BA[i] := 0;
end;
angesehen.

Hab Strg+Alt+W gedrückt und die Variable i eingetragen. Als ersten Wert wird i mit 156 :gruebel: belegt. Und dann wird i runtergezählt auf 0!!!
Was stimmt denn jetzt wieder nicht :wall:

Dazu muss ich aber sagen, dass die Prozedur perfekt arbeitet, dass heißt, im gesamten Array steht im Endeffekt 0.

mirage228 23. Mär 2005 11:04

Re: Compiler-Fehler: "Downto" statt "To"
 
Hi,

das liegt an der Compiler Optimierung. Rückwärtszählen geht schneller als vorwärtszählen und wenn es egal ist, wie rum gezählt wird, zählt der Delphi Compiler (bei eingeschalteter) Optimierung rückwärts.

mfG
mirage228

jfheins 23. Mär 2005 11:06

Re: Compiler-Fehler: "Downto" statt "To"
 
Das ist die Compileroptimierung. der mach daraus das:
Delphi-Quellcode:
for i:=156 downto 0 do
    BA[i + 97] := 0;
Weils runterzählen einfach schneller geht ... ;-)

gordon freeman 23. Mär 2005 11:10

Re: Compiler-Fehler: "Downto" statt "To"
 
Okay, wieder was gelernt, thx! :dp:

alcaeus 23. Mär 2005 11:12

Re: Compiler-Fehler: "Downto" statt "To"
 
Da muss ich kurz korrigieren:
Zitat:

Zitat von jfheins
Weils runterzählen einfach schneller geht ... ;-)

Das Zählen geht genausoschnell. Allerdings ist ein Vergleich auf 0 schneller als ein Vergleich auf 156, und deshalb wird der Code so optimiert.

Greetz
alcaeus

mirage228 23. Mär 2005 11:15

Re: Compiler-Fehler: "Downto" statt "To"
 
Zitat:

Zitat von alcaeus
Da muss ich kurz korrigieren:
Zitat:

Zitat von jfheins
Weils runterzählen einfach schneller geht ... ;-)

Das Zählen geht genausoschnell. Allerdings ist ein Vergleich auf 0 schneller als ein Vergleich auf 156, und deshalb wird der Code so optimiert.

Greetz
alcaeus

Ok, dann könnte man es so formulieren:

Das Rückwätszählen läuft schneller ab, weil ein Vergleich auf 0 schneller ist, als auf eine andere Zahl. ;)

mfG
miraqe228

jfheins 23. Mär 2005 11:17

Re: Compiler-Fehler: "Downto" statt "To"
 
Ich glaube aber
Delphi-Quellcode:
ZeroMemory (@BA, length (BA) * SizeOf (Integer))
könnte fast noch schneller sein ...

Chewie 23. Mär 2005 18:16

Re: Compiler-Fehler: "Downto" statt "To"
 
Zitat:

Zitat von mirage228
Ok, dann könnte man es so formulieren:

Das Rückwätszählen läuft schneller ab, weil ein Vergleich auf 0 schneller ist, als auf eine andere Zahl. ;)

Nein. Aber wenn durch eine Rechenoperation ein Register den Wert 0 erhält, wird das Zero-Flag automatisch gesetzt. Dadurch spart man sich ein CMP.

semo 23. Mär 2005 18:44

Re: Compiler-Fehler: "Downto" statt "To"
 
optimierung abstellen ist der erfahrung nach das beste

Binärbaum 23. Mär 2005 19:08

Re: Compiler-Fehler: "Downto" statt "To"
 
Zitat:

Zitat von computer-glossar.de
optimierung abstellen ist der erfahrung nach das beste

Wozu soll das den gut sein?
Ob so eine Schleife nun vor- oder rückwärts läuft, macht in dem vorgestellten Fall keinen Unterschied.

MfG
Binärbaum


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:30 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz