Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Optimierung durch Compiler

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
09.12.2004, 18:48 Uhr
derphilipder



Hi!

Wenn ich z.B. sowas habe:


C++:
vector <double> v(100);
for(int i=0; i<v.size(); i++)
{
   //...
}



Dann habe ich ja 100mal den Aufruf der Methode size(). Folglich würde ich sie einmal vor der Schleife aufrufen und den Wert speichern.

Ich frage mich, ob ein vernünftiger Compiler diese Optimierung auch automatisch macht.
--
Konfuzius says: "A man who goes to bed with an itchy asshole is a man who wakes up with stinky finger!"
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
09.12.2004, 19:57 Uhr
(un)wissender
Niveauwart


Jupp.
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
09.12.2004, 19:59 Uhr
derphilipder



Das ist gut - eine Sorge weniger!
--
Konfuzius says: "A man who goes to bed with an itchy asshole is a man who wakes up with stinky finger!"
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
10.12.2004, 09:13 Uhr
virtual
Sexiest Bit alive
(Operator)


Ein paar Anmerkungen:


C++:
for(int i=0; i<v.size(); ++i) {
   sum += v[i];
}


Solche trivialen Konstrukte, da hat (un)wissender recht, werden oft von Compilern dahingehend optimiert, daß das size rausgeschmissen wird. (Verläßlich ist das aber nicht).
Aber bei komplexeren Schleifen ist dies mit zunehmender Komplexität unwahrscheinlicher, zB dieser Code:

C++:
int x(std::vector<int>& v, in i) { // Fehlende const-Korrektness, sorry, ist aber so!
    return v[i];
}
...
for(int i=0; i<v.size(); ++i) {
   sum += x(v,i);
}


Wird der Compiler nicht den Size-Call wegoptimieren (können).

Letztlich verhält es oft so (aber auch das ist nicht garantiert), daß vector.size() eine inline Funktion ist; mit anderen Worten: der Zugriff "v.size()" reduziert sich auf das Auslesen einer Speicherstelle im RAM, genauso, wie wenn er es aus einer zuvor angelegten Variablen machen müsste, wenn Du dort size() drin speichert. Ein "vernünfigter" Compiler würde mithin sogar diese Variable wegoptimieren.

Wenn wir also von einem "vernünftigen Compiler" ausgehen, dann nach es gehopst wie gesprungen wie du es machst.

Nun könnte man auf die Idee kommen Code schreiben zu wollen, der auf für unvernünftige Compiler "optimal performant" ist. Tipp: lass es sein.
Solche Konstrukte sind in der regel schwerer zu lesen als das eingangserwähnte Beispiel:

C++:
int size = v.size();
for(int i=0; i<size; ++i) {
   sum+=v[i];
}


Abgesehen davon werden die meisten Programme qualitativ schlechter, wenn man so einen Kleinsch*** optimiert...
Lange Rede kurzer Sinn:
Optimiere Algorithmen, nicht Code
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
10.12.2004, 10:52 Uhr
derphilipder



Alles klar - Thx!
--
Konfuzius says: "A man who goes to bed with an itchy asshole is a man who wakes up with stinky finger!"
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: