2012-01-04 23 views
16

Si tuviera que declarar una variable dentro de un bucle, ¿es más rápido tener la declaración fuera del bucle? ¿El programa reasigna la memoria para n en cada iteración o utiliza la misma ubicación de memoria en todo momento?Variables declaradas dentro de un bucle

for(int i=0;i<10;i++) 
{ 
    int n = getNumber(); 
    printf("%d\n",n); 
} 

frente

int n; 
for(int i=0;i<10;i++) 
{ 
    n = getNumber(); 
    printf("%d\n",n); 
} 

Respuesta

12

Las variables no son realmente "creados" o "destruido". Son conceptos en el nivel de abstracción del lenguaje de programación. No es necesario que el compilador tenga un mapeo uno a uno entre una variable y direcciones de memoria. En la práctica, la mayoría de las veces, el espacio de pila para las variables locales se asigna de una vez al comienzo de la función, por lo que no hará una diferencia en el rendimiento.

Tenga en cuenta que C++, a diferencia de C, que no tiene una noción de constructores, admite la construcción y destrucción de objetos, por lo que si definiera una variable de un tipo de clase en un ciclo for, como el siguiente,

class MyClass { 
    public: MyClass() { cout << "hello world" << endl; } 
}; 
//... 
for (int i = 0; i < 10; ++i) { 
    MyClass m; 
} 

llamarías a su constructor cada vez, imprimiendo "hola mundo" diez veces. Esto es muy diferente de las declaraciones C y no debe confundirse con él.

+0

Gracias, quise decir es la memoria reasignada en cada iteración. He cambiado la pregunta. –

14

Cualquier compilador moderno los optimizaría para el mismo código de máquina, por lo que debería ver ninguna diferencia.

+2

La definición en el ciclo es más clara y podría producir un código más optimizado ya que el compilador conoce la duración (aunque probablemente no sea para un tipo simple) –

1

Para la mayoría de los compiladores modernos, esto no importa. Asignarán registros de procesador o colocarán las variables en la pila lo más eficientemente posible.

Cuestiones relacionadas