Want to win a PS4? Go Premium and enter to win our High-Tech Treats giveaway. Enter to Win

x
?
Solved

simple c++ language question

Posted on 2006-07-17
11
Medium Priority
?
286 Views
Last Modified: 2010-04-01
may be this will sound realy dumb but...
when you have this code:

void f()
{
  TCHAR szName[200];
  ZeroMemory( szName, 200 );
}
void g()
{
 static TCHAR szSurname[200];
 ZeroMemory( szSurname, 200 );

}

void main()
{
 for( int i = 0; i < 10 ; i++ )
 {
    f();
    g();
 }
}

how many time will szName be allocated?

thanks.
A.
0
Comment
Question by:Agarici
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 4
  • 3
  • 2
  • +2
11 Comments
 
LVL 11

Author Comment

by:Agarici
ID: 17122955
i know that szSurname will be allocated only once
but what about szName?
0
 
LVL 86

Expert Comment

by:jkr
ID: 17123217
Since 'szName()' is non-static, it'll be allocated on the stack ten times, that's what the loop

for( int i = 0; i < 10 ; i++ )

does for i ranging from 0...9.
0
 
LVL 2

Assisted Solution

by:Linky
Linky earned 200 total points
ID: 17123226
szName will be allocated 10 times, ZeroMemory will clear the block each time though.
0
Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
LVL 11

Author Comment

by:Agarici
ID: 17123293
well... that is what i also know...
i asked this because i had a dispute with a collegue of mine... and he was saying that szName will only be alocated once on the stack... with such a strong belief that made me wory...

thanks
A.
0
 
LVL 86

Expert Comment

by:jkr
ID: 17123425
>>he was saying that szName will only be alocated once on the stack

For 'f()', that's true, but since 'f()' is called 10 times in the loop...

The key difference here is the 'static' keyword on the other local variable, which specifies that the variable has static duration (it is allocated when the program begins and deallocated when the program ends).
0
 
LVL 11

Author Comment

by:Agarici
ID: 17123515
what if i have:
void f()
{
 for( int i = 0 ; i < 10 ; i++)
 {  
     TCHAR szName[200];
     ZeroMemory( szName, 200 );
 }
}

void main()
{
 for( int i = 0; i < 10 ; i++ )
 {
    f();
 }
}

there will be 100 allocations, corect?
0
 
LVL 86

Accepted Solution

by:
jkr earned 1600 total points
ID: 17123559
Yes and no. Most modern compilers will move the declaration out of the loop body when set to perform any optimizations in release builds, but when compiling without any optimizations enabled, you're right, it will be allocated 100 times.
0
 
LVL 39

Assisted Solution

by:itsmeandnobodyelse
itsmeandnobodyelse earned 200 total points
ID: 17123560
>>>> For 'f()', that's true, but since 'f()' is called 10 times in the loop...

A good compiler won't make any allocation cause the call to f() might get a subject of optimization cause it doesn't change anything in the calling main().

In Debug mode all optimizations were switched off and you easily can verify that the storage was created 10 times (on the stack so it may get the same address any time). If you replace " TCHAR szName[200];"  by a class object, e. g. "CString strName;" or "std::string strName" you can step into the constructor and destructor any time f() was called.

Regards, Alex

0
 
LVL 11

Author Comment

by:Agarici
ID: 17123583
ok
thank you all for the replys
A.
0
 
LVL 17

Expert Comment

by:rstaveley
ID: 17123645
> he was saying that szName will only be alocated once on the stack...

It gets allocated on the stack each time the function is called when it is automatic, but what your colleague may have been thinking is that the memory is released when the function exists, so the same chunk of memory will be typically be allocated each time, when you call the function in your loop.
0
 
LVL 17

Expert Comment

by:rstaveley
ID: 17123653
s/when the function exists/when the function exits/
0

Featured Post

What’s Wrong with Your Cloud Strategy ?

Even as many CIOs are embracing a cloud-first strategy, the reality is that moving to the cloud is a lengthy process and the end-state is likely to be a blend of multiple clouds—public and private. Learn why multicloud solutions matter in this webinar by Nimble Storage.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Written by John Humphreys C++ Threading and the POSIX Library This article will cover the basic information that you need to know in order to make use of the POSIX threading library available for C and C++ on UNIX and most Linux systems.   [s…
Introduction This article is a continuation of the C/C++ Visual Studio Express debugger series. Part 1 provided a quick start guide in using the debugger. Part 2 focused on additional topics in breakpoints. As your assignments become a little more …
The viewer will learn how to use the return statement in functions in C++. The video will also teach the user how to pass data to a function and have the function return data back for further processing.
The viewer will learn how to user default arguments when defining functions. This method of defining functions will be contrasted with the non-default-argument of defining functions.
Suggested Courses

636 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question