Deklaration in Schleife



  • Verursacht das Deklarieren und Initialisieren einer Variablen in einer Schleife Performanceeinbußen gegenüber Deklaration außerhalb der Schleife?

    So:

    for (int i = 0...
        int z = i * 3;
        ...
    

    oder so?

    int z;
    for (int i = 0...
        z = i * 3;
        ...
    


  • Nein



  • Es verursacht höchstens Zeiteinbußen, wenn du ein Programm schreibst, welches mehrfach den gleichen Namen (z.B. "i") für aufeinander folgende Schleifen verwendet, und du dieses Programm dann unter VS6 kompilieren sollst. (Alternativ: "unter einem Compiler, der nicht wirklich standardkonform ist, kompilieren sollst").

    Die Zeit ist dann aber deine Arbeitszeit. Vom Nervenschaden will ich gar nicht sprechen.



  • Danke, ich hatte nur vermutet, dass das Reservieren des Speichers (statt eines int hätte es auch ein string sein können, das wäre dann ja noch aufwändiger) jedes Mal von neuem in der Schleife nicht wegoptimiert wird und daher ineffizient ist.



  • Das hast du auch richtig vermutet. Nur hast du in deinem Beispiel int genommen, und primitive Typen kann der Compiler diesbzgl. optimieren. Performance Nachteile sind dort also nicht zu erwarten. Bei einem std::string zB sieht das aber schon wieder ganz anders aus. Deshalb ist es dort vermutlich besser, die Definition ausserhalb zu machen. Aber wie bei den meisten Sachen: wenn du die Performance herausfinden möchtest, dann miss es!


Anmelden zum Antworten