From http://www.computing.net/answers/programming/heap-vs-stack/11004.html:
I will assume that you know what the stack is for, so won't describe that:
Stack:
- local variables (variables declared inside a function) are put on the stack - unless they are also declared as 'static' or 'register'
- function parameters are allocated on the stack
- local variables that are declared on the stack are not automatically initialized by the system so they usually have garbage in them until you set them
- variables on the stack disappear when the function exits (thus, if a function is called multiple times, it's local variables and parameters are recreated and destroyed each time the function is called end exited).Heap:
- declared variables (as opposed to dynamically created ie new, malloc) are created on the heap before program execution begins, they exist the entire life of the program (although scope may prevent access to them - they still exist) and they are initialized to all zeros
- global variables are on the heap
- static local variables are on the heap (this is how they keep their value between function calls)
- memory allocated by new, malloc and calloc are on the heapSo now, on to the question of where to put your arrays. You want to consider:
- the size - the stack has a limit size, so large arrays should be allocated in the heap. Sometimes having too many local variables or large local arrays will cause stack overflow errors
- do you want the values held between function calls (if yes, put on heap, if not, can be on stack)
- is initialization of the array time consuming (if yes, may want to put on heap so that you have to initialize only once)Remember that using 'new' rather than 'normal declaration' is not the only way to move variables from the stack to the heap:
- you can make a local variable static - this puts it on the heap but keeps the scope local to the function - remember it keeps it's value between function calls
- you can make it global - but scope allows 'everyone' to access it.So let's look at your three specific examples:
- an array of 2 elements
I wouldn't worry about it. Make it local and thus on the stack.- an array of 2000 elements
I'd usually make this global or allocate with new to keep the stack size down. But if it's a small program, who cares.- 100 arrays of 2 elements
I wouldn't make 100 arrays of 2 elements. I'd make a 2 dimensional array (100x2) and probably put on the heap. Since you normally want to avoid global variables, I'd consider putting it on the heap by using dynamic allocation or making it static and initializing only the first time thru the array. BUt it partially depends upon what is stored in the array and how dynamic the data is.This is a quick response to a not trivial question. Hope it helps some.

Buffer overflow
Post new comment