Automatic variables in C++
Possible Duplicate:
In C++, why should new
be used as little as possible?
Where are automatic variables allocated in C++? On the stack or the heap?
Also, I read in 7.9 — The stack and the heap that all memory allocated on the stack is known at compile time. Is it true? Does it mean that only static memory allocation happens on the stack?
Also, please mention links, references to aa complete explanatory text about memory allocation in C++.
C++ does not have the concept of a stack or heap, it is an implementation detail as far as the language is concerned .
That being said, every implementation I know of uses the stack to manage the lifetime of local variables. However, many local variables may end up living entirely within registers and never touch the stack, and some local variables may be optimised out completely. Just because you declare an automatic variable doesn't mean that it will be put on the stack.
eg
int main()
{
int x = rand();
int y = 2;
cout << x << y << endl;
return 0;
}
In this code, with optimisations on, the variable y
will almost certainly be removed completely and variable x
will probably be given its own register. It's unlikely that either of those variables will ever exist on the stack.
Automatic (local) variables are not allocated on the heap. They will either live on the stack or in a register.
And yes, all stack allocations are know at compile time.
The link you referenced is actually a pretty good resource for describing how c++ handles memory.
Yes, auto vars are allocated, most commonly, on the stack (the C++ standard doesn't specify "stack" but it is safe enough to assume that).
You can use the stack to allocate dynamic memory with the alloca()
function, but that is not very good practice, more on that in this question: Why is the use of alloca() not considered good practice?
上一篇: 为什么使用'新'是一个坏主意?
下一篇: C ++中的自动变量