[C/C++] Compiler Optimierung

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von xXsoureXx, 20. Januar 2010 .

Schlagworte:
Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. 20. Januar 2010
    Compiler Optimierung

    Tag zusammen.

    Möchte gern etwas dazu wissen, wie ein C++-Compiler vorgeht...

    Code:
     for(int i=0; i<strlen(wort); ++i)
     {
     /*...*/
     }
    
    Meine Frage ist, ob der Compiler (/das Programm) immer wieder strlen aufruft, um
    zu sehen, ob i noch kleiner ist? Oder wird das "wegoptimiert" (mit/ohne -O3)?

    Sprich, wäre es von der Performance her hier besser eine Variable,
    mit dem Wert strlen(wort) zu belegen und dann auf i<Variable zu testen?

    Oder auch:
    Code:
     for(int i=0; i<irgendeineVariable; ++i)
     {
     if(ausgabe == true) // Abfrage innerhalb der Schleife...
     cout << value << endl;
     value += value;
     }
    
    /* oder doch... */
    
     if(ausgabe == true) // ... vor der Schleife?
     {
     for(int i=0; i<irgendeineVariable; ++i)
     {
     cout << value << endl;
     value += value;
     }
     }
     else
     {
     for(int i=0; i<irgendeineVariable; ++i)
     {
     value += value;
     }
     }

    ...Ok. Ich weiß das sind nicht die besten Beispiele und man wird ggf. den Unterschied
    wahrscheinlich nicht merken, aber meine Frage dürfte klar sein
    Und auch wenn es nur "Kleinigkeiten" sind - interessieren tut's mich trotzdem

    mfg
    xXsoureXx
     
  2. 20. Januar 2010
    AW: Compiler Optimierung

    Ändert sich die ausgabe innerhalt der Schleife nicht, ... if > schleife - Variante.
    Da checkt er nur 1mal und nicht i-mal.

    Wenn du das meinst, sicher bin ich mir nicht.
     
  3. 20. Januar 2010
    AW: Compiler Optimierung

    Mit den Standarteinstellungen wird die Funktion strlen auf jeden Fall mehrmals aufgerufen.
    Jede andere Funktion bestimmt auch.

    Ob es mit dem Optimier Parameter anders ist kann ich dir nicht sagen, aber ich bezweifel es dafür müsste der Compiler den ganzen Code analysieren um herauszufindne ob sich da was ändert und auch wenn das gemacht wird, wird es bestimmt nicht immer erkannt ob die Funktion nur einmal aufgerufen werden muss oder mehrmals.

    Mfg Rushh0ur
     
  4. 20. Januar 2010
    AW: Compiler Optimierung

    also wenn ich mich nich irre ruft der Compiler jedesmal wenn er die schleife betritt das strlen(wort) auf und überprüft obs kleiner/größer ist, also den wert von strlen(wort)
    dann wird der schleifenrumpf ausgeführt, die zähl variable wird erhöht und dann gehts von vorne los

    aber es macht keinen unterschied ob du strlen(wort) in deiner schleife drin hast oder
    ob eine variable mit dem wert von strlen(wort) deklarierst und die variable in die schleife packst
     
  5. 20. Januar 2010
    AW: Compiler Optimierung

    ja die funktion wird jedesmal aufgerufen, weil der compiler ja nicht weiß ob sich die variable "wort" ändert. wenn das alles statisch ("wort") ist könnte man das zur compiletime optimieren, aber nur wenn kein ausdruck vorliegt ("wort" + "wort").
     
  6. 20. Januar 2010
    AW: Compiler Optimierung

    Ja, es wird jedesmal neu aufgerufen, und das halt folgenden Grund:

    Das Programmverhalten könnte sich ändern, wenn er es nicht tun würde, denn wenn die Variable wort z.B. ihre Größe ändern würde, stimmt da was nicht, bzw. würde es zu einem quasi undefinierten (d.h. nicht vom Programmierer vorgesehenen Ablauf) Verhalten kommen.

    Außerdem ist von der Verwendung von -O3 abzuraten, dieser kann das Programm mit Fehlern 'bestücken'. Verwende lieber -O2. ;-)
     
  7. 20. Januar 2010
    AW: Compiler Optimierung

    Okey, danke soweit

    close.
     
  8. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.