Download presentation
Presentation is loading. Please wait.
1
Observing how the machine acts
Function Tracing Observing how the machine acts Copyright © Curt Hill
2
An Unusual Trace The following trace shows how the machine handles function calls on the stack The variable name is parenthesized Memory locations will be shown with a three digit number Addresses will be in yellow Line number for code Memory location for Memory parameters Copyright © Curt Hill
3
One more thought This trace includes all the goodies:
Value parameters Reference parameters Automatic local variables Static local variables Global variables As well as two function calls that occupy different stack locations Copyright © Curt Hill
4
Memory Trace(0) Memory 487 488 489 490 491 492 493 Output is 494 495
int c; int f1(int & i,int j) { int k=j*2; static int m=-2; m = m+i-1; i = k + j; return(j+m); } int f2(int & i){ return f1(++i,c++)/2; int main (void) { int a=2,b=3; c = f1(a,b); cout<< a << b << c << "\n"; b = f2(a); cout << a << b << c << "\n"; 487 488 489 490 491 492 493 494 495 496 497 498 499(c) 500(m) -2 Output is Copyright © Curt Hill
5
Memory Trace(1) Memory 487 488 489 490 491 492 493 Output is 494 495
int c; int f1(int & i,int j) { int k=j*2; static int m=-2; m = m+i-1; i = k + j; return(j+m); } int f2(int & i){ return f1(++i,c++)/2; int main (void) { int a=2,b=3; c = f1(a,b); cout<< a << b << c << "\n"; b = f2(a); cout << a << b << c << "\n"; 487 488 489 490 491 492 493 494 495 496 497(b) 3 498(a) 2 499(c) 500(m) -2 Output is Copyright © Curt Hill
6
Memory Trace(2) Memory 487 488 489 490 491 492 493 Output is 494
int c; int f1(int & i,int j) { int k=j*2; static int m=-2; m = m+i-1; i = k + j; return(j+m); } int f2(int & i){ return f1(++i,c++)/2; int main (void) { int a=2,b=3; c = f1(a,b); cout<< a << b << c << "\n"; b = f2(a); cout << a << b << c << "\n"; 487 488 489 490 491 492 493 494 495(rs) 496(rt)14 497(b) 3 498(a) 2 499(c) 500(m) -2 Output is Copyright © Curt Hill
7
Memory Trace(3) Memory 487 488 489 490 491 492 493(j) 3 Output is
int c; int f1(int & i,int j) { int k=j*2; static int m=-2; m = m+i-1; i = k + j; return(j+m); } int f2(int & i){ return f1(++i,c++)/2; int main (void) { int a=2,b=3; c = f1(a,b); cout<< a << b << c << "\n"; b = f2(a); cout << a << b << c << "\n"; 487 488 489 490 491 492 493(j) 3 494(i)498 495(rs) 496(rt)14 497(b) 3 498(a) 2 499(c) 500(m) -2 Output is Copyright © Curt Hill
8
Memory Trace(4) Memory 487 488 489 490 491 492(k) 6 493(j) 3 Output is
int c; int f1(int & i,int j) { int k=j*2; static int m=-2; m = m+i-1; i = k + j; return(j+m); } int f2(int & i){ return f1(++i,c++)/2; int main (void) { int a=2,b=3; c = f1(a,b); cout<< a << b << c << "\n"; b = f2(a); cout << a << b << c << "\n"; 487 488 489 490 491 492(k) 6 493(j) 3 494(i)498 495(rs) 496(rt)14 497(b) 3 498(a) 2 499(c) 500(m) -2 Output is Copyright © Curt Hill
9
Memory Trace(5) Memory 487 488 489 490 491 492(k) 6 493(j) 3 Output is
int c; int f1(int & i,int j) { int k=j*2; static int m=-2; m = m+i-1; i = k + j; return(j+m); } int f2(int & i){ return f1(++i,c++)/2; int main (void) { int a=2,b=3; c = f1(a,b); cout<< a << b << c << "\n"; b = f2(a); cout << a << b << c << "\n"; 487 488 489 490 491 492(k) 6 493(j) 3 494(i)498 495(rs) 496(rt)14 497(b) 3 498(a) 2 499(c) 500(m) -1 Output is Copyright © Curt Hill
10
Memory Trace(6) Memory 487 488 489 490 491 492(k) 6 493(j) 3 Output is
int c; int f1(int & i,int j) { int k=j*2; static int m=-2; m = m+i-1; i = k + j; return(j+m); } int f2(int & i){ return f1(++i,c++)/2; int main (void) { int a=2,b=3; c = f1(a,b); cout<< a << b << c << "\n"; b = f2(a); cout << a << b << c << "\n"; 487 488 489 490 491 492(k) 6 493(j) 3 494(i)498 495(rs) 496(rt)14 497(b) 3 498(a) 9 499(c) 500(m) -1 Output is Copyright © Curt Hill
11
Memory Trace(7) Memory 487 488 489 490 491 492(k) 6 493(j) 3 Output is
int c; int f1(int & i,int j) { int k=j*2; static int m=-2; m = m+i-1; i = k + j; return(j+m); } int f2(int & i){ return f1(++i,c++)/2; int main (void) { int a=2,b=3; c = f1(a,b); cout<< a << b << c << "\n"; b = f2(a); cout << a << b << c << "\n"; 487 488 489 490 491 492(k) 6 493(j) 3 494(i)498 495(rs) 2 496(rt)14 497(b) 3 498(a) 9 499(c) 500(m) -1 Output is Copyright © Curt Hill
12
Memory Trace(8) Memory 487 488 489 490 491 492 6 493 3 Output is
int c; int f1(int & i,int j) { int k=j*2; static int m=-2; m = m+i-1; i = k + j; return(j+m); } int f2(int & i){ return f1(++i,c++)/2; int main (void) { int a=2,b=3; c = f1(a,b); cout<< a << b << c << "\n"; b = f2(a); cout << a << b << c << "\n"; 487 488 489 490 491 495(rs) 2 496(rt)14 497(b) 3 498(a) 9 499(c) 2 500(m) -1 Output is Copyright © Curt Hill
13
Memory Trace(9) Memory 487 488 489 490 491 492 6 493 3 Output is
int c; int f1(int & i,int j) { int k=j*2; static int m=-2; m = m+i-1; i = k + j; return(j+m); } int f2(int & i){ return f1(++i,c++)/2; int main (void) { int a=2,b=3; c = f1(a,b); cout<< a << b << c << "\n"; b = f2(a); cout << a << b << c << "\n"; 487 488 489 490 491 495(rs) 2 496(rt)14 497(b) 3 498(a) 9 499(c) 2 500(m) -1 Output is Copyright © Curt Hill
14
Memory Trace(10) Memory 487 488 489 490 491 492 6 493 3 Output is
int c; int f1(int & i,int j) { int k=j*2; static int m=-2; m = m+i-1; i = k + j; return(j+m); } int f2(int & i){ return f1(++i,c++)/2; int main (void) { int a=2,b=3; c = f1(a,b); cout<< a << b << c << "\n"; b = f2(a); cout << a << b << c << "\n"; 487 488 489 490 491 495(rs) 2 496(rt)16 497(b) 3 498(a) 9 499(c) 2 500(m) -1 Output is Copyright © Curt Hill
15
Memory Trace(11) Memory 487 488 489 490 491 492 6 493 3 Output is
int c; int f1(int & i,int j) { int k=j*2; static int m=-2; m = m+i-1; i = k + j; return(j+m); } int f2(int & i){ return f1(++i,c++)/2; int main (void) { int a=2,b=3; c = f1(a,b); cout<< a << b << c << "\n"; b = f2(a); cout << a << b << c << "\n"; 487 488 489 490 491 494(i)498 495(rs) 2 496(rt)16 497(b) 3 498(a) 9 499(c) 2 500(m) -1 Output is Copyright © Curt Hill
16
Memory Trace(12) Memory 487 488 489 490 491 492 6 493 3 Output is
int c; int f1(int & i,int j) { int k=j*2; static int m=-2; m = m+i-1; i = k + j; return(j+m); } int f2(int & i){ return f1(++i,c++)/2; int main (void) { int a=2,b=3; c = f1(a,b); cout<< a << b << c << "\n"; b = f2(a); cout << a << b << c << "\n"; 487 488 489 490 491 494(i)498 495(rs) 2 496(rt)16 497(b) 3 498(a) 10 499(c) 2 500(m) -1 Output is Copyright © Curt Hill
17
Memory Trace(13) Memory 487 488 489 490 491 492(rs) 6 493(rt)10
int c; int f1(int & i,int j) { int k=j*2; static int m=-2; m = m+i-1; i = k + j; return(j+m); } int f2(int & i){ return f1(++i,c++)/2; int main (void) { int a=2,b=3; c = f1(a,b); cout<< a << b << c << "\n"; b = f2(a); cout << a << b << c << "\n"; 487 488 489 490 491 492(rs) 6 493(rt)10 494(i)498 495(rs) 2 496(rt)16 497(b) 3 498(a) 10 499(c) 2 500(m) -1 Output is Copyright © Curt Hill
18
Memory Trace(14) Memory 487 488 489 490(j) 2 491(i)498 492(rs) 6
int c; int f1(int & i,int j) { int k=j*2; static int m=-2; m = m+i-1; i = k + j; return(j+m); } int f2(int & i){ return f1(++i,c++)/2; int main (void) { int a=2,b=3; c = f1(a,b); cout<< a << b << c << "\n"; b = f2(a); cout << a << b << c << "\n"; 487 488 489 490(j) 2 491(i)498 492(rs) 6 493(rt)10 494(i)498 495(rs) 2 496(rt)16 497(b) 3 498(a) 10 499(c) 2 500(m) -1 Output is Copyright © Curt Hill
19
Memory Trace(15) Memory 487 488 489(k) 4 490(j) 2 491(i)498 492(rs) 6
int c; int f1(int & i,int j) { int k=j*2; static int m=-2; m = m+i-1; i = k + j; return(j+m); } int f2(int & i){ return f1(++i,c++)/2; int main (void) { int a=2,b=3; c = f1(a,b); cout<< a << b << c << "\n"; b = f2(a); cout << a << b << c << "\n"; 487 488 489(k) 4 490(j) 2 491(i)498 492(rs) 6 493(rt)10 494(i)498 495(rs) 2 496(rt)16 497(b) 3 498(a) 10 499(c) 2 500(m) -1 Output is Copyright © Curt Hill
20
Memory Trace(16) Memory 487 488 489(k) 4 490(j) 2 491(i)498 492(rs) 6
int c; int f1(int & i,int j) { int k=j*2; static int m=-2; m = m+i-1; i = k + j; return(j+m); } int f2(int & i){ return f1(++i,c++)/2; int main (void) { int a=2,b=3; c = f1(a,b); cout<< a << b << c << "\n"; b = f2(a); cout << a << b << c << "\n"; 487 488 489(k) 4 490(j) 2 491(i)498 492(rs) 6 493(rt)10 494(i)498 495(rs) 2 496(rt)16 497(b) 3 498(a) 10 499(c) 2 500(m) 8 Output is Copyright © Curt Hill
21
Memory Trace(17) Memory 487 488 489(k) 4 490(j) 2 491(i)498 492(rs) 6
int c; int f1(int & i,int j) { int k=j*2; static int m=-2; m = m+i-1; i = k + j; return(j+m); } int f2(int & i){ return f1(++i,c++)/2; int main (void) { int a=2,b=3; c = f1(a,b); cout<< a << b << c << "\n"; b = f2(a); cout << a << b << c << "\n"; 487 488 489(k) 4 490(j) 2 491(i)498 492(rs) 6 493(rt)10 494(i)498 495(rs) 2 496(rt)16 497(b) 3 498(a) 6 499(c) 2 500(m) 8 Output is Copyright © Curt Hill
22
Memory Trace(18) Memory 487 488 489(k) 4 490(j) 2 491(i)498 492(rs)10
int c; int f1(int & i,int j) { int k=j*2; static int m=-2; m = m+i-1; i = k + j; return(j+m); } int f2(int & i){ return f1(++i,c++)/2; int main (void) { int a=2,b=3; c = f1(a,b); cout<< a << b << c << "\n"; b = f2(a); cout << a << b << c << "\n"; 487 488 489(k) 4 490(j) 2 491(i)498 492(rs)10 493(rt)10 494(i)498 495(rs) 2 496(rt)16 497(b) 3 498(a) 6 499(c) 2 500(m) 8 Output is Copyright © Curt Hill
23
Memory Trace(19) Memory 487 488 489 4 490 2 491 498 492(rs)10
int c; int f1(int & i,int j) { int k=j*2; static int m=-2; m = m+i-1; i = k + j; return(j+m); } int f2(int & i){ return f1(++i,c++)/2; int main (void) { int a=2,b=3; c = f1(a,b); cout<< a << b << c << "\n"; b = f2(a); cout << a << b << c << "\n"; 487 488 492(rs)10 493(rt)10 494(i)498 495(rs) 2 496(rt)16 497(b) 3 498(a) 6 499(c) 3 500(m) 8 Output is Copyright © Curt Hill
24
Memory Trace(20) Memory 487 488 489 4 490 2 491 498 492(rs)10
int c; int f1(int & i,int j) { int k=j*2; static int m=-2; m = m+i-1; i = k + j; return(j+m); } int f2(int & i){ return f1(++i,c++)/2; int main (void) { int a=2,b=3; c = f1(a,b); cout<< a << b << c << "\n"; b = f2(a); cout << a << b << c << "\n"; 487 488 492(rs)10 493(rt)10 494(i)498 495(rs) 5 496(rt)16 497(b) 3 498(a) 6 499(c) 3 500(m) 8 Output is Copyright © Curt Hill
25
Memory Trace(21) Memory int c; int f1(int & i,int j) { int k=j*2; static int m=-2; m = m+i-1; i = k + j; return(j+m); } int f2(int & i){ return f1(++i,c++)/2; int main (void) { int a=2,b=3; c = f1(a,b); cout<< a << b << c << "\n"; b = f2(a); cout << a << b << c << "\n"; 487 488 495(rs) 5 496(rt)16 497(b) 5 498(a) 6 499(c) 3 500(m) 8 Output is Copyright © Curt Hill
26
Memory Trace(22) Memory int c; int f1(int & i,int j) { int k=j*2; static int m=-2; m = m+i-1; i = k + j; return(j+m); } int f2(int & i){ return f1(++i,c++)/2; int main (void) { int a=2,b=3; c = f1(a,b); cout<< a << b << c << "\n"; b = f2(a); cout << a << b << c << "\n"; 487 488 497(b) 5 498(a) 6 499(c) 3 500(m) 8 Output is 9 3 2 6 5 3 Copyright © Curt Hill
27
Notes Blank memory locations would have something in them
Random memory garbage This program never uses something before it is initialized Memory retains its value even when the scope ceases The function result slot is not changed until the return is executed If no return the previous contents will be returned Copyright © Curt Hill
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.