[Icc-avr] Variables declared in main() and the stack

Kevin Davis kdavis at alltrafficsolutions.com
Thu Nov 29 12:13:23 PST 2007


David,

Thanks for the good info ... wasn't aware of the register/efficiency
issue. 

Regarding your statement on the (lack of a) difference between variables
on the stack or main ram, I assume you mean then that the only thing you
can control with a compiler option (unless you're using a custom config)
is the size of the hardware stack containing function return addresses,
so whether the variables are put on the bottom or top (software stack
below the hardware stack) of the ram makes essentially no difference.

And, I guess what amounts to the same thing, unless you have a heavily
recursive program, a stack overflow is primarily caused by the software
stack encroaching on the heap.

Kevin

Kevin Davis
All Traffic Solutions
-----Original Message-----
From: icc-avr-bounces at imagecraft.com
[mailto:icc-avr-bounces at imagecraft.com] On Behalf Of David Brown
Sent: Wednesday, November 28, 2007 4:32 PM
To: Discussion list for ICCAVR and ICCtiny Users. You do NOT need
tosubscribe to icc-announce if you are a member of this.
Subject: Re: [Icc-avr] Variables declared in main() and the stack

Kevin Davis wrote:
> I'm learning more about pointers and their relation to the heap and 
> stack and was wondering:
> 
> Does it make sense (if scope is not an issue) to make variables that 
> will only be used in main() global rather than use up stack space with
them?
> 
>  

In a word, no.  On a target like the AVR, it is *always* more efficient 
to use local variables rather than global ones.  For the most part, they

exist only in registers - only if you have lots of them, or if they are 
aggregates (arrays or structs), do they spill out onto the stack.  And 
even if they are allocated on the stack, there is no difference between 
taking up memory on the stack, and taking up memory in the main ram.

> 
> Just curious as to any rules-of-thumb with regards to this (if there
are 
> any). If this question makes no sense let me know as well but from
what 
> I've learned the variables declared in main() are put on the stack and

> would remain there for the program's duration.
> 

Local variables in a function do not necessarily exist throughout the 
lifetime of the function.  They exist *theoretically* throughout their 
scope - but the scope can be any block within a function.  So if you 
have variables that are only used for part of a function, you can put 
them inside a block (within a {} pair) for efficiency.  The compiler can

do this sort of lifetime analysis itself - it does not need to allocate 
a variable before it is actually used, and can remove it (and re-use its

register or stack space) as soon as it is finished with.



_______________________________________________
Icc-avr mailing list
Icc-avr at imagecraft.com
http://dragonsgate.net/mailman/listinfo/icc-avr



More information about the Icc-avr mailing list