Reputation: 263
If I were to declare a variable inside of a loop, is it faster to have the declaration outside of the loop? Does the program reallocate the memory for n
at each iteration or use the same memory location throughout?
for(int i=0;i<10;i++)
{
int n = getNumber();
printf("%d\n",n);
}
versus
int n;
for(int i=0;i<10;i++)
{
n = getNumber();
printf("%d\n",n);
}
Upvotes: 25
Views: 17178
Reputation: 26164
For most modern compilers, this doesn't matter. They will assign processor registers or place the variables on the stack as efficiently as possible.
Upvotes: 1
Reputation: 272802
Any modern compiler would optimise these to the same machine code, so you should see no difference.
Upvotes: 14
Reputation: 422280
Variables are not really "created" or "destroyed". They are concepts at the abstraction level of the programming language. The compiler is not required to have a one to one mapping between a variable and memory addresses. In practice, most of the time, stack space for local variables is allocated at once at the beginning of the function, so it won't make a difference in performance.
Note that, C++, unlike C, which doesn't have a notion for constructors, supports object construction and destruction, so if you were to define a variable of a class type in a for loop, like the following,
class MyClass {
public: MyClass() { cout << "hello world" << endl; }
};
//...
for (int i = 0; i < 10; ++i) {
MyClass m;
}
you'd call its constructor every time, effectively printing "hello world" ten times. This is very different from C declarations and should not be confused with it.
Upvotes: 17