"Temporäre" Variablen - sinnvoll?
Verfasst: 20.05.2024, 18:43
n'Abend meine geschätzen ZFX'ler :-)
Ich habe öfters die Situation, dass sich die Frage aufdrängt, ob sich das Anlegen einer temporäre Variable lohnen könnte.
Dabei drehen sich diesbezüglich meine Überlegungen eigentlich immer um die beiden Aspekte "Optimierungen" und "Lesbarkeit".
Exemplarisch:
1) Eine for-schleife die im Bedingungsteil irgendeine Berechnung anstellen muss.
oder:
(Je nach dem auch etwas komplexer)
Ist der Compiler "schlau" genug, sich gewisse Resultate selbstständig zwischenzuspeichern?
Im ersten der beiden Beispiele würde man ja - im schlimmsten Falle - zweimal einen Pointer dereferenzieren und dann noch multiplizieren - und das in jedem Schleifendurchgang.
Im zweiten Beispiel würde zwar der sizeof Operator zur Compile-Time ausgewertet, doch es bliebe die Division - die ja auch nicht grad gratis ist.
Alternativ könnte man nun dazu übergehen ausserhalb der Schleife eine Stack-Variable zu deklarieren:
Die hat dann halt ihren Scope nicht nur auf die Schleife begrenzt, was vielleicht nicht ganz so "schön" ist. Man könnte sie ja manchmal in den Schlaufenkopf nehmen - dass geht aber ja bekanntlich nur, wenn sie vom gleichen Typ ist, wie die Zählvariable.
Ein weiteres Szenario: Indices für ein Array.
Auch hier wieder (womöglich) die Dereferenzierung zweier Pointer und sanftes Gerechne.
Dann weiter: Fragen zur Lesbarkeit
Selbst wenn man den Wert einer temporäre Stack-Variable ohnehin immer wieder erneut ausrechnen müsste, bliebe noch das Argument der besseren Lesbarkeit (?).
Sinnvoll oder unnötiges Rauschen im Code?
Zuguter letzt kommen dann noch Überlegungen zum Stack hinzu.
Der müsste ja eigentlich jedesmal aufs Neue angelegt werden (beim Eintritt in die Funktion).
Sollte ich also ein array mit z.B. 256 Elementen (Jump Table) besser static deklarieren, damit der Compiler sich das dauernde Aufbauen und Abräumen ersparen kann?
Wie handhabt ihr das in eurem Code?
(Ich gehe jetzt hier primär von C aus. Aber hinsichtlich diesen Fragen dürfte das diesmal kein Unterschied machen)
LG, starcow
Ich habe öfters die Situation, dass sich die Frage aufdrängt, ob sich das Anlegen einer temporäre Variable lohnen könnte.
Dabei drehen sich diesbezüglich meine Überlegungen eigentlich immer um die beiden Aspekte "Optimierungen" und "Lesbarkeit".
Exemplarisch:
1) Eine for-schleife die im Bedingungsteil irgendeine Berechnung anstellen muss.
Code: Alles auswählen
for(int i = 0; i < Board->wid * Board->hei; ++i)
Code: Alles auswählen
for(int i = 0; i < sizeof(a)/sizeof(a[0]); ++i)
Ist der Compiler "schlau" genug, sich gewisse Resultate selbstständig zwischenzuspeichern?
Im ersten der beiden Beispiele würde man ja - im schlimmsten Falle - zweimal einen Pointer dereferenzieren und dann noch multiplizieren - und das in jedem Schleifendurchgang.
Im zweiten Beispiel würde zwar der sizeof Operator zur Compile-Time ausgewertet, doch es bliebe die Division - die ja auch nicht grad gratis ist.
Alternativ könnte man nun dazu übergehen ausserhalb der Schleife eine Stack-Variable zu deklarieren:
Code: Alles auswählen
int cnt = Board->wid * Board->hei;
Code: Alles auswählen
for(int i = 0, v = Board->wid * Board->hei; i < v; ++i)
Code: Alles auswählen
a[Board->wid * Board->hei + 1]
Dann weiter: Fragen zur Lesbarkeit
Selbst wenn man den Wert einer temporäre Stack-Variable ohnehin immer wieder erneut ausrechnen müsste, bliebe noch das Argument der besseren Lesbarkeit (?).
Code: Alles auswählen
int index = Board->wei * Board->hei + 1;
a[index] = 5;
Zuguter letzt kommen dann noch Überlegungen zum Stack hinzu.
Der müsste ja eigentlich jedesmal aufs Neue angelegt werden (beim Eintritt in die Funktion).
Sollte ich also ein array mit z.B. 256 Elementen (Jump Table) besser static deklarieren, damit der Compiler sich das dauernde Aufbauen und Abräumen ersparen kann?
Wie handhabt ihr das in eurem Code?
(Ich gehe jetzt hier primär von C aus. Aber hinsichtlich diesen Fragen dürfte das diesmal kein Unterschied machen)
LG, starcow