If my application is out of memory when i call new() i will get exception and malloc() i will get 0 pointer.
But what if i call a method with some local variables? They occupy memory too. Is there some way to reserve memory for "normal" variables? So that even though new() throws exception i can just catch it, fix stuff and still call methods like usual.
Your data is allocated in one of three ways:
You generally shouldn't run out of stack space unless you perform some heavy recursion though.
THe C++ language doesn't provide any mechanism for reserving memory for local variables. Your specific C++ implementation and/or operating system may provide some means of increasing the total stack size, but this is not normally necessary.
Note also that if a call to new does fail, there is probably very little you can practically do to recover from it. Many people (me included) no longer bother checking for new failure.
New allocates memory from the heap, but local vars are normally on the stack - which can overflow, but is less likely, depending on your platform. Can you provide more details?
The compiler knows how much of memory per stack you need. However, sufficiently high number of stacks (caused due to recursion) will crash your program -- there probably isn't another way to fix this.
The standard has an interesting annexure called Implementation Quantities . This is non-normative (informative) and hence should not be treated as the absolute truth, but provides you with a fair idea.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.