Frage zu for-Schleife
-
Hallo Leute!
Habe folgende Frage. Wenn ich ganz normale for schleife habe, etwa:for(int i = 0; i < N * 4; ++i){ //some stuff }
wird dann N * 4 bei jeder Iteration ausgeführt oder wird es nur einmal ausgeführt und dann im Speicher abgelegt und so zum Vergleich benutzt?
Grüsse,
Lado
-
der optimierende compiler kann solche berechnungen aus der schleife rausziehen.
-
Danke für die schnelle Antwort erstmal!
Also das kommt auf den Compiler an? So was habe ich auch vermutet. Der Compiler ist gcc 3.3 auf AIX. Kann man so was in der Spezifikation nachlesen?
Grüsse,
Lado
-
laut standard wird der part jedes mal neu ausgefuehrt.
gcc optimiert da aber die einfachsten faelle von selbst.N koennte sich aber in der schleife aendern. ich weiss nicht, ob gcc erkennt, ob es sich nicht aendert und dann weiter optimiert.
-
hmm, ok Vielen Dank für die Infos.
Grüsse,
Lado
-
N koennte sich aber in der schleife aendern. ich weiss nicht, ob gcc erkennt, ob es sich nicht aendert und dann weiter optimiert.
I.d.R. erkennt gcc das, weshalb man Variablen die durch Signal-Handler ausserhalb der Schleife verändert werden auch volatile deklarieren müsste...
-
Also bei mir ändert sich N nicht. kann ich dann die Berechnung ruhig in der Schleifenkopf lassen oder soll ich es davor ausrechnen, in eine Variable speichern und so benutzen? Also es geht um ~15,000,000 Iteratioenen.
-
probier es doch aus, ob es was bringt.
dann probiere mal verschiedene compilerflags (-O -O2 -O3 fuer GCC).
-
ist N ein #define? wenn ja, dann sollte das N*4 zur compilezeit berechnet werden. d.h. es compiliert zu einem anderen konstanten wert (16 oder sowas). ist es eine variable (sieht ja nicht so aus) dann kann's schon sein, dass das mehrfach berechnet wird (kommt drauf an ob der compiler erkennt, dass N nicht von der schleife verändert wird)