Variablen innerhalb von Schleifen anlegen



  • Hi,

    macht es einen großen unterschied ob ich nun

    for (int i = 0; i < 10; i++)
    {
       int zahl = i*i;
    }
    
    // oder
    
    int zahl;
    for (int i = 0; i < 10; i++)
    {
       zahl = i*i;
    }
    

    verwende. Dies ist jetzt nur ein kleines Beispiel, ich spreche von größeren Schleifen. Wird im ersten Fall die Variable dann nicht 10x an gelegt und verbraucht 10x mehr Speicher?

    Hummel



  • Hummel Star schrieb:

    Hi,

    macht es einen großen unterschied ob ich nun

    for (int i = 0; i < 10; i++)
    {
       int zahl = i*i;
    }
    
    // oder
    
    int zahl;
    for (int i = 0; i < 10; i++)
    {
       zahl = i*i;
    }
    

    verwende. Dies ist jetzt nur ein kleines Beispiel, ich spreche von größeren Schleifen. Wird im ersten Fall die Variable dann nicht 10x an gelegt und verbraucht 10x mehr Speicher?

    Hummel

    Auf die performance wirkt sich das kaum/garnet aus, da das anlegen vom variablen auf dem stack schlecht einfach nur das verringern des wertes im %ESP registers ist. Und ob ich von einem Wert oder subtrahiere, is eh wurscht.

    Im übrigen kanns es AFAIK passieren dass der compiler es wegoptimiert => die varaible VOR die shcleife auslagert. MfG, Klugscheisser mit Halbwissen



  • wenn du nicht mit new anlegst, dann brauchts nicht mehr speicher und auch nicht mehr zeit, weil der compiler sowieso die 2te variante aus der 1sten macht



  • nönönö schrieb:

    weil der compiler sowieso die 2te variante aus der 1sten macht

    Nicht unbedingt - das siehst du spätestens, wenn du anstelle der int's eine eigene Klasse dort verwendest. Der Compiler kann das optimieren, aber das ist seine Angelegenheit (und bei int's dürfte es keinen großen Unterschied zwischen Copy-Konstruktion und Zuweisung geben).



  • ich seh das so

    wenn die variable ausserhalb der schleife ist wird die immer neu ueberschrieben in der schleife

    wenn man in der schleife eine setzt wird die variable immerwieder zerstoert und gleich eine neue erstellt {lebensdauer nur in der schleife} - dh sobald er wieder das for abfragt ist die vorherige variable schon gar nicht mehr verfuegbar


Log in to reply