If I have a function like this:
void bla(int size) {
while(b){
char tmp[size];
......
}
}
tmp gets freed at each it
alloca
allocates on the stack and has no knowledge about scopes, so it gets freed after leaving the stack frame (= after leaving the function).
It will be freed at end of function, but since you call alloca()
inside the loop you'll likely get stack overflow. If size
doesn't change within the function you should call alloca()
before the loop.
Memory allocated with alloca()
is deallocated when the function exits. See for instance the manual page for more information.
Regarding the former case, of just an auto-variable in the scope, I'm not sure how you would define that it gets "freed". You can't reference it outside of the scope that defines it, and if it had an initializer it would get re-initialized on each iteration.