Call Stacks John Keyser
Stacks A very basic data structure. – Data structure: a container for holding data in a program. – Classes, structs can be thought of as data structures – The vector is a data structure we have already used. Like forming a stack of objects Two basic operations – Push (add something to top of stack) – Pop (remove whatever is on top of stack
Example: Push 5 Push 10 Pop Push 8 Push 1 Pop 5 5
Example: Push 5 Push 10 Pop Push 8 Push 1 Pop 5 10
Example: Push 5 Push 10 Pop Push 8 Push 1 Pop 5 10
Example: Push 5 Push 10 Pop Push 8 Push 1 Pop 5 8 8
Example: Push 5 Push 10 Pop Push 8 Push 1 Pop
Example: Push 5 Push 10 Pop Push 8 Push 1 Pop
Example: Push 5 Push 10 Pop Push 8 Push 1 Pop 5 8
Example: Push 5 Push 10 Pop Push 8 Push 1 Pop 5
Functions (aka routines, methods, etc.) When a function is called, it is pushed onto a call stack. – What is pushed on is a “function activation record” – This record contains the information/variables the function uses (effectively the local scope When a function finishes, it is popped off of the call stack. – It might return a value to the prior item in the stack. The call stack can get very deep – many functions are called from one another 11Stroustrup/Programming -- Oct'10
Example 7 different functions (A through F) int A() {… B(); C(); …} int B() {… D(); E(); …} int C() {… D(); F(); …} int D() {…} int E() {… G(); …} int F() {…} int G() {…} main() {… A(); …}
Example 7 different functions (A through F) int A() {… B(); C(); …} int B() {… D(); E(); …} int C() {… D(); F(); …} int D() {…} int E() {… G(); …} int F() {…} int G() {…} main() {… A(); …} Call Stack A
Example 7 different functions (A through F) int A() {… B(); C(); …} int B() {… D(); E(); …} int C() {… D(); F(); …} int D() {…} int E() {… G(); …} int F() {…} int G() {…} main() {… A(); …} Call Stack A B
Example 7 different functions (A through F) int A() {… B(); C(); …} int B() {… D(); E(); …} int C() {… D(); F(); …} int D() {…} int E() {… G(); …} int F() {…} int G() {…} main() {… A(); …} Call Stack A B D
Example 7 different functions (A through F) int A() {… B(); C(); …} int B() {… D(); E(); …} int C() {… D(); F(); …} int D() {…} int E() {… G(); …} int F() {…} int G() {…} main() {… A(); …} Call Stack A B
Example 7 different functions (A through F) int A() {… B(); C(); …} int B() {… D(); E(); …} int C() {… D(); F(); …} int D() {…} int E() {… G(); …} int F() {…} int G() {…} main() {… A(); …} Call Stack A B E
Example 7 different functions (A through F) int A() {… B(); C(); …} int B() {… D(); E(); …} int C() {… D(); F(); …} int D() {…} int E() {… G(); …} int F() {…} int G() {…} main() {… A(); …} Call Stack A B E G
Example 7 different functions (A through F) int A() {… B(); C(); …} int B() {… D(); E(); …} int C() {… D(); F(); …} int D() {…} int E() {… G(); …} int F() {…} int G() {…} main() {… A(); …} Call Stack A B E
Example 7 different functions (A through F) int A() {… B(); C(); …} int B() {… D(); E(); …} int C() {… D(); F(); …} int D() {…} int E() {… G(); …} int F() {…} int G() {…} main() {… A(); …} Call Stack A B
Example 7 different functions (A through F) int A() {… B(); C(); …} int B() {… D(); E(); …} int C() {… D(); F(); …} int D() {…} int E() {… G(); …} int F() {…} int G() {…} main() {… A(); …} Call Stack A
Example 7 different functions (A through F) int A() {… B(); C(); …} int B() {… D(); E(); …} int C() {… D(); F(); …} int D() {…} int E() {… G(); …} int F() {…} int G() {…} main() {… A(); …} Call Stack A C
Example 7 different functions (A through F) int A() {… B(); C(); …} int B() {… D(); E(); …} int C() {… D(); F(); …} int D() {…} int E() {… G(); …} int F() {…} int G() {…} main() {… A(); …} Call Stack A C D
Example 7 different functions (A through F) int A() {… B(); C(); …} int B() {… D(); E(); …} int C() {… D(); F(); …} int D() {…} int E() {… G(); …} int F() {…} int G() {…} main() {… A(); …} Call Stack A C
Example 7 different functions (A through F) int A() {… B(); C(); …} int B() {… D(); E(); …} int C() {… D(); F(); …} int D() {…} int E() {… G(); …} int F() {…} int G() {…} main() {… A(); …} Call Stack A C F
Example 7 different functions (A through F) int A() {… B(); C(); …} int B() {… D(); E(); …} int C() {… D(); F(); …} int D() {…} int E() {… G(); …} int F() {…} int G() {…} main() {… A(); …} Call Stack A C
Example 7 different functions (A through F) int A() {… B(); C(); …} int B() {… D(); E(); …} int C() {… D(); F(); …} int D() {…} int E() {… G(); …} int F() {…} int G() {…} main() {… A(); …} Call Stack A
Example 7 different functions (A through F) int A() {… B(); C(); …} int B() {… D(); E(); …} int C() {… D(); F(); …} int D() {…} int E() {… G(); …} int F() {…} int G() {…} main() {… A(); …} Call Stack