0
What is the advantage of declaring variable in stack
Since you can use new variables from the heap, which you can keep juste as with those from the stack, but also can erase etc. To release memory. Anyhow, you can do both and thus whatever you want with variable from the heap, so what is the advantage in using variable from the stack ? Or maybe I understood something wrong, possible too since I'm only at the "functions" chapter ^^
7 Answers
0
When a function is finished, it frees the memory used to store local variables on the stack (so this memory can be used again).
Learn more about stack, you'll understand what I mean...
+ 2
Using the stack is good for small variables or for pointers on objects that are declared in the heap.
Don't forget the size of the stack is limited, while the size of the heap can change.
In functions, local variables are stored on the stack and are deleted at return statement (see stack pointer in assembly, you will easily understand).
0
It doesn't completely answer my question as I already understood those points.
I mean, precisely, the size of the heap can adapt where the size of the slack is limited. So why declare even small variables in the slack when I could just use pointers and go with variables in the heap with the same efficiency in the heap, but with more flexibility on the memory ?
0
Using stack, you're sure that there is no memory leaking.
0
From what I understood, memory leaking is about having a memory space used up for nothing because it's attributed to a variable you do not need anymore...
But if you have the variable in the slack, then you cannot free the memory space anyhow... Isn't that like a memory leak ? (Sorry if those questions seems dumb, I really try to wrap my head around how the memory works)
0
Ok, I'll do that, and come back if I don't ;) thx !
0
Here is a "picture"
Before a function call : stack
address value
0x00 int a //local variable a
0x01
0x02
After function call
address value
0x00 int a
0x01 return address
0x02 int b //local variable b
After return statment
address value
0x00 int a
0x01
0x02