Post on 22-Feb-2016
description
transcript
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 5
10
10
Example:
• Push 5• Push 10• Pop• Push 8• Push 1• Pop• Pop• Pop 5
10
Example:
• Push 5• Push 10• Pop• Push 8• Push 1• Pop• Pop• Pop 5
8
8
Example:
• Push 5• Push 10• Pop• Push 8• Push 1• Pop• Pop• Pop 5
81
1
Example:
• Push 5• Push 10• Pop• Push 8• Push 1• Pop• Pop• Pop 5
108
1
Example:
• Push 5• Push 10• Pop• Push 8• Push 1• Pop• Pop• Pop 5
8
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
11Stroustrup/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
AB
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
ABD
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
AB
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
ABE
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
ABEG
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
ABE
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
AB
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
AC
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
ACD
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
AC
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
ACF
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
AC
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