what is better? straightforward question on variable declaration

  • Thread starter Vasileios Zografos
  • Start date
V

Vasileios Zografos

Ok, easy question.
Not caring about the variable scope what is better (i.e. possibly in
memory allocation etc)


int someVar=0;

for (int i=0;i<1000;i++)
{
...
someVar++;
...
}


OR

for (int i=0;i<1000;i++)
{
...
int someVar=0;
someVar++;
...
}




Or it really doesnt make any difference at all?
 
V

Victor Bazarov

Vasileios Zografos said:
Ok, easy question.
Not caring about the variable scope what is better (i.e. possibly in
memory allocation etc)


int someVar=0;

for (int i=0;i<1000;i++)
{
...
someVar++;
...
}


OR

for (int i=0;i<1000;i++)
{
...
int someVar=0;
someVar++;
...
}




Or it really doesnt make any difference at all?

For the POD like your 'int someVar' it most likely does not
matter.

Victor
 
J

Jack Klein

Ok, easy question.
Not caring about the variable scope what is better (i.e. possibly in
memory allocation etc)

Have you read what you posted carefully? Does it really represent the
question you wanted to ask?
int someVar=0;

for (int i=0;i<1000;i++)
{
...
someVar++;
...
}

In the example above, someVar will take on the values of 1 through
1000 on successive iterations of the loop.
OR

for (int i=0;i<1000;i++)
{
...
int someVar=0;
someVar++;
...
}

In the example above, someVar will always be 0 at the point where it
is defined and initialized, and always 1 after the post increment
expression. It will never take on the values 2 through 1000, no
matter how many times the loop executed.
Or it really doesnt make any difference at all?

If this were real code, it certainly would make a difference.

In principle, a variable defined inside a block is created when
execution reaches the line that defines it, and is destroyed when
control reaches the end of the block or leaves the block.

If a variable defined inside a loop is a type with a non-trivial
constructor and destructor, each of these will be called for each
iteration of the loop. If the object is a primitive built-in type,
and perhaps even a POD structure or class type, the compiler may
generate code to allocate the memory once and reuse it each time, or
it may decide to allocate and deallocate the memory by some method in
each iteration of the loop. There is no requirement or guarantee
either way.

--
Jack Klein
Home: http://JK-Technology.Com
FAQs for
comp.lang.c http://www.eskimo.com/~scs/C-faq/top.html
comp.lang.c++ http://www.parashift.com/c++-faq-lite/
alt.comp.lang.learn.c-c++ ftp://snurse-l.org/pub/acllc-c++/faq
 
V

Vasileios Zografos

Have you read what you posted carefully? Does it really represent the
question you wanted to ask?
Yes


In the example above, someVar will take on the values of 1 through
1000 on successive iterations of the loop.




In the example above, someVar will always be 0 at the point where it
is defined and initialized, and always 1 after the post increment
expression. It will never take on the values 2 through 1000, no
matter how many times the loop executed.

yeah....I am not interested in the value of someVar. More on if it has
some overhead on the construction/desctruction, memory and so on.
 
V

Vasileios Zografos

For the POD like your 'int someVar' it most likely does not
matter.

Victor
so, if instead int someVar it was something like

vector<int> someVar

???
 
V

Vasileios Zografos

Non-trivial constructor will be invoked during execution of
every loop cycle.

I am not sure of the reason for your question, but if you are
concerned with performance,

it was about performace really (or anyting else that I am missing)

don't be until your code works.
If the design of your algorithm calls for the existence of
the object beyond the loop, then declare it before, otherwise
declare it inside. Only if later, once your algorithm is
working fine, you discover that it's unacceptably sluggish
due to multitude of calls to the constructor, you could try
to get rid of them. But at the beginning try following this
simple rule: do not declare an object until you actually need
it.

ok I ll follow that rule
Thanks
Vasileios
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,781
Messages
2,569,615
Members
45,293
Latest member
Hue Tran

Latest Threads

Top