The C language allows you to declare variables at different visibility scopes, but all of the runtime cost of that allocation is usually incurred when the function is entered and left. So the following function allocates three words at entry, and frees three words at exit.
void func() {
int a, b; // allocate 3 words for a, b, c, d
...
if (b) {
int c; // already allocated, now visible
...
}
if (a) {
int d; // recycle word for c, now renamed
...
}
...
} // a, b, c, d (3 words) all freed
C++ compilers also usually allocate the stack space when the function is entered and left also, but constructors and destructors must be executed at the marked edges of scope, unless the compiler can prove it would have no effect one way or the other.
Allocation is a detail left to the compiler, whereas the actual rules of order of operations are defined by the language spec. Play with your "output as assembler" options to check the effects of runtime overhead.
--
[ e d @ h a l l e y . c c ]
Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
Read Where should I post X? if you're not absolutely sure you're posting in the right place.
Please read these before you post! —
Posts may use any of the Perl Monks Approved HTML tags:
- a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
| |
For: |
|
Use: |
| & | | & |
| < | | < |
| > | | > |
| [ | | [ |
| ] | | ] |
Link using PerlMonks shortcuts! What shortcuts can I use for linking?
See Writeup Formatting Tips and other pages linked from there for more info.