Stack unwinding is normally a concept of removing function entries from call stack (also known as Execution stack, Control stack,
Function stack or Run-time stack). Call Stack is a stack data structure that stores active functions' addresses and helps in supporting function
call/return mechanism. Every time when a function is called, an entry is made into Call stack which contains the return address of the calling function
where the control needs to return after the execution of called function. This entry is called by various names like stack frame, activation frame or
activation record.
With respect to exception handling, stack Unwinding is a process of linearly searching function call stack to reach exception handler. When an exception occurs, if it is not handled in current function where it is thrown, the function Call Stack is unwound until the control reaches try block and then passes to catch block at the end of try block to handle exception.
Also, in this process, it takes care to free memory used from stack.
Let us see an example to understand how this happens:
Output1 (When exception is not thrown ):
Output2 (When exception is thrown):
Check from Output1 that in case of normal execution (without exceptions), Stack unwinding happens from the top i.e latest function call and also Destructor of each object in each function is called when the execution of function completes.
Check from Output2 that when exception is thrown, each called function terminates abruptly instead of returning to calling function normally. Note that in this case also, program frees stack memory and continues freeing the stack until it reaches exception handler. This process is called as stack unwinding.
Code of this example can be found on our GitHub account here:
https://github.com/xmementoit/CppAdventureExamples/tree/master/advancedCpp/stackUnwinding
With respect to exception handling, stack Unwinding is a process of linearly searching function call stack to reach exception handler. When an exception occurs, if it is not handled in current function where it is thrown, the function Call Stack is unwound until the control reaches try block and then passes to catch block at the end of try block to handle exception.
Also, in this process, it takes care to free memory used from stack.
Let us see an example to understand how this happens:
Output1 (When exception is not thrown ):
Output2 (When exception is thrown):
Check from Output1 that in case of normal execution (without exceptions), Stack unwinding happens from the top i.e latest function call and also Destructor of each object in each function is called when the execution of function completes.
Check from Output2 that when exception is thrown, each called function terminates abruptly instead of returning to calling function normally. Note that in this case also, program frees stack memory and continues freeing the stack until it reaches exception handler. This process is called as stack unwinding.
Code of this example can be found on our GitHub account here:
https://github.com/xmementoit/CppAdventureExamples/tree/master/advancedCpp/stackUnwinding
Comments
Post a Comment