Presentation is loading. Please wait.

Presentation is loading. Please wait.

Observing how the machine acts

Similar presentations


Presentation on theme: "Observing how the machine acts"— Presentation transcript:

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


Download ppt "Observing how the machine acts"

Similar presentations


Ads by Google