300 likes | 523 Views
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
E N D
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 • Pop • Pop 5 5
Example: • Push 5 • Push 10 • Pop • Push 8 • Push 1 • Pop • Pop • Pop 10 10 5
Example: • Push 5 • Push 10 • Pop • Push 8 • Push 1 • Pop • Pop • Pop 10 5
Example: • Push 5 • Push 10 • Pop • Push 8 • Push 1 • Pop • Pop • Pop 8 8 5
Example: • Push 5 • Push 10 • Pop • Push 8 • Push 1 • Pop • Pop • Pop 1 1 8 5
Example: • Push 5 • Push 10 • Pop • Push 8 • Push 1 • Pop • Pop • Pop 1 10 8 5
Example: • Push 5 • Push 10 • Pop • Push 8 • Push 1 • Pop • Pop • Pop 8 5
Example: • Push 5 • Push 10 • Pop • Push 8 • Push 1 • Pop • Pop • 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 Stroustrup/Programming -- Oct'10
Example7 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(); …}
Example7 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
Example7 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 B A
Example7 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 D B A
Example7 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 B A
Example7 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 E B A
Example7 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 G E B A
Example7 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 E B A
Example7 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 B A
Example7 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
Example7 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 C A
Example7 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 D C A
Example7 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 C A
Example7 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 F C A
Example7 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 C A
Example7 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
Example7 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