Skip to main content

Advanced C++ - Stack unwinding

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


Comments

Popular posts from this blog

GDB Automatic Deadlock Detector

Have you ever had a problem with detection deadlock between threads in your C/C++ application? Would you like to do that automatically? Try this GDB Automatic Deadlock Detector from my github: GDB Automatic Deadlock Detector Picture source: http://csunplugged.org/wp-content/uploads/2015/03/deadlock.jpg1286488735

Advanced C++ - Effective C++ - cheatsheet

I would like to share with you my summary of the "Effective C++" book by Scott Meyers . It is very interesting book for everyone who would like to improve C++ developments skills to be every effective. I highly recommend it. Quick summary of that book, which I prepared you can download after by clicking on below image. Summary of Effective C++ book by Damian Ziobro