+ 2
Static and dynamic memory
Please explain what is the stack and the heap? Why do we have a difference in memory (static and dynamic memory )?
3 Answers
+ 1
The stack is used for static memory. Inside a function, when you declare a variable, it is stored on the stack. When the function call is finished, then all the stack is freed.
When a function is called, here is the stack
Adress VALUE
0x07 return adress
0x06 int a = 10
0x05 int b = 100
...
The integers are variables declared in the function
After this function call
Adress VALUE
0x07 0
0x06 0
You see, the stack allocated for the function call is freed, so the variables you declared there (a and b) doesn't exist anymore. (in fact, you can always access the value, but it is hard to explain : Learn assembly)
+ 1
The heap isn't used like the stack. You access the heap only through pointers. An example, in c++
int *a = new int ;
*a = 10 ;
Here, the value pointed by a isn't stored on the stack but on the heap. But the pointer, a, is declared on the stack.
That means that after a function call, the pointer a will be destroyed on the stack, but the value pointed by a will survive on the heap : that are memory leaks.
Another difference between stack and heap is that the heap is very very large, and that memory allocated on it is in fact allocated by the os, not by the program : you can't know by advance where memory will be allocated.
In assembly, you work directly with stack thanks to esp and ebp register, so you can know by advance where memory will be allocated.
+ 1
Watch mycodeschool channel videos on YouTube you'll be perfectly well known about stack and heap in C programs