the stack and heap are part of a known address space shared by a third memory type: the program code. (By the way, embedded environments may be thought of as having only static memory.
Statics/globals are useful for memory that you know you will always need and you know that you don't ever want to deallocate. Multiple threads will require multiple stacks (the process generally reserves a minimum size for the stack). You run out of memory when the stack meets the dynamic allocator somewhere in the middle (but refer to physical versus virtual memory and fragmentation). Stacks usually start high and grow down to lower addresses. Generally, the dynamic memory allocator (malloc, new, et c.) starts at the end of memory and works backwards.Įxplaining how a stack grows and shrinks is a bit outside the scope of this answer, but suffice to say you always add and remove from the end only.
WHAT IS STATIC RAM FREE
If you want 4kb for an object then the dynamic allocator will look through its list of free space in the heap, pick out a 4kb chunk, and give it to you. The heap is a bunch of memory that can be used dynamically. No matter how many times you go into a function call (or class) (and in how many threads!) the variable is referring to the same memory location. There is only one copy for the entire program. Usually there is an address for it that is in the executable itself. Summary of what static, heap, and stack memory are:Ī static variable is basically a global variable, even if you cannot access it globally.
A similar question was asked, but it didn't ask about statics.