
Hi, 2009/5/18 Anthony Williams <anthony.ajw@gmail.com>:
I don't think exception objects are allocated on the stack in MSVC, and I don't see how they could be --- if an exception is caught then before the handler is entered the stack needs to be unwound and all the destructors run. Having an exception object lurking halfway down the empty stack space would just confuse things no end.
I debugged this once to find out what's what exactly and it is halfway down the stack. The stack below it is unwound but it is not freed until the end of the exception handler. The exception handler executes on the stack just above (below) the exception, and the exception is destroyed and the stack below it freed when it's done. This all is based on empirical measurement. When I figured it out it seemed like a good solution, except for the case where you have just unwound a big stack and build up a new big stack inside an exception handler. That seems an off-case that isn't worth the trouble though. Kind regards, Peter Bindels