Download - CS 136 Remote Learning Edition Supplemental Contentcs136/current/handouts/...STACK int g = 5;const int r = 13;int foo(int a) { // SNAPSHOT 2 int b = 2;const int c = 3;// SNAPSHOT 3

Transcript
  • This scholarly work is copyright (c) 2020 Dave Tompkins and is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.

    CS 136 – Remote Learning EditionSupplemental Content

    Intro Music: HAPPY by texasradiofish (c) copyright 2020 Licensed under a Creative Commons Noncommercial Sampling Plus license.http://dig.ccmixter.org/files/texasradiofish/62035 Ft: Haskel, Martijn de Boer, Apoxode, Stefan Kartenberg, Subhashish, boboshin

    • The primary content source for CS 136 is the lecture notes (“readings”)

    • This video is designed to supplement and enrich the lecture notes with additional examples and explanations

    • This video was recorded in Fall 2020 – Any errata or discrepancies from the current lecture notes will be identified in an special piazza post

  • CS 136 Lecture NotesSupplemental Examples

    Memory Snapshots and Control Flow

  • Control FlowExample 1

    The Call Stack

  • void blue(void) {printf("three\n");return;

    }

    void green(void) {blue();printf("four\n");return;

    }

    void red(void) {printf("two\n");green();printf("five\n");return;

    }

    int main(void) {printf("one\n");red();printf("six\n");

    }

    main main

    red

    green

    main

    red

    green

    blue

    main

    red

    green

    main

    red

    mainmain

    printf

    mainmain

    red

    call stack over time

  • Memory SnapshotsExample 2

    Read-Only, Global Data and the Stack

  • int g = 5;const int r = 13;

    int foo(int a) {// SNAPSHOT 2int b = 2;const int c = 3;// SNAPSHOT 3return a * b * c;

    }

    int main(void) {// SNAPSHOT 1int z = 1;int y = foo(z);// SNAPSHOT 4

    }

    READ-ONLYr: 13

    GLOBAL DATAg: 5

    mainz: ???y: ???r/a: OS

    STACK

  • STACK

    int g = 5;const int r = 13;

    int foo(int a) {// SNAPSHOT 2int b = 2;const int c = 3;// SNAPSHOT 3return a * b * c;

    }

    int main(void) {// SNAPSHOT 1int z = 1;int y = foo(z);// SNAPSHOT 4

    }

    READ-ONLYr: 13

    GLOBAL DATAg: 5

    mainz: 1y: ???r/a: OS

    fooa: 1b: ???c: ???r/a: main ●

  • STACK

    int g = 5;const int r = 13;

    int foo(int a) {// SNAPSHOT 2int b = 2;const int c = 3;// SNAPSHOT 3return a * b * c;

    }

    int main(void) {// SNAPSHOT 1int z = 1;int y = foo(z);// SNAPSHOT 4

    }

    READ-ONLYr: 13

    GLOBAL DATAg: 5

    mainz: 1y: ???r/a: OS

    fooa: 1b: 2c: 3r/a: main ●

  • STACK

    int g = 5;const int r = 13;

    int foo(int a) {// SNAPSHOT 2int b = 2;const int c = 3;// SNAPSHOT 3return a * b * c;

    }

    int main(void) {// SNAPSHOT 1int z = 1;int y = foo(z);// SNAPSHOT 4

    }

    READ-ONLYr: 13

    GLOBAL DATAg: 5

    mainz: 1y: 6r/a: O/S

  • Memory SnapshotsExample 3

    Multiple Returns and Block Variables

  • void say_hello(void) {printf("hello\n");// SNAPSHOT 2

    }

    int foo(int a) {int b = 2;if (a < 0) {

    int c = a * a;// SNAPSHOT 4return a * b * c;

    } else if (a > 0) {int d = a * -1;// SNAPSHOT 6return a * b * d;

    }return 0;

    }

    int main(void) {// SNAPSHOT 1say_hello();// SNAPSHOT 3int z = foo(-4);// SNAPSHOT 5int y = foo(3);// SNAPSHOT 7

    }

    READ-ONLY GLOBAL DATA

    mainz: ???y: ???r/a: OS

    STACK

  • READ-ONLY GLOBAL DATA

    mainz: ???y: ???r/a: OS

    STACK

    say_hellor/a: main ●

    void say_hello(void) {printf("hello\n");// SNAPSHOT 2

    }

    int foo(int a) {int b = 2;if (a < 0) {

    int c = a * a;// SNAPSHOT 4return a * b * c;

    } else if (a > 0) {int d = a * -1;// SNAPSHOT 6return a * b * d;

    }return 0;

    }

    int main(void) {// SNAPSHOT 1say_hello();// SNAPSHOT 3int z = foo(-4);// SNAPSHOT 5int y = foo(3);// SNAPSHOT 7

    }

  • READ-ONLY GLOBAL DATA

    mainz: ???y: ???r/a: OS

    STACK

    void say_hello(void) {printf("hello\n");// SNAPSHOT 2

    }

    int foo(int a) {int b = 2;if (a < 0) {

    int c = a * a;// SNAPSHOT 4return a * b * c;

    } else if (a > 0) {int d = a * -1;// SNAPSHOT 6return a * b * d;

    }return 0;

    }

    int main(void) {// SNAPSHOT 1say_hello();// SNAPSHOT 3int z = foo(-4);// SNAPSHOT 5int y = foo(3);// SNAPSHOT 7

    }

  • READ-ONLY GLOBAL DATA

    mainz: ???y: ???r/a: OS

    STACK

    fooa: -4b: 2c: 16d: ???

    r/a: main ●

    void say_hello(void) {printf("hello\n");// SNAPSHOT 2

    }

    int foo(int a) {int b = 2;if (a < 0) {

    int c = a * a;// SNAPSHOT 4return a * b * c;

    } else if (a > 0) {int d = a * -1;// SNAPSHOT 6return a * b * d;

    }return 0;

    }

    int main(void) {// SNAPSHOT 1say_hello();// SNAPSHOT 3int z = foo(-4);// SNAPSHOT 5int y = foo(3);// SNAPSHOT 7

    }

  • STACK

    READ-ONLY GLOBAL DATA

    mainz: -128y: ???r/a: OS

    void say_hello(void) {printf("hello\n");// SNAPSHOT 2

    }

    int foo(int a) {int b = 2;if (a < 0) {

    int c = a * a;// SNAPSHOT 4return a * b * c;

    } else if (a > 0) {int d = a * -1;// SNAPSHOT 6return a * b * d;

    }return 0;

    }

    int main(void) {// SNAPSHOT 1say_hello();// SNAPSHOT 3int z = foo(-4);// SNAPSHOT 5int y = foo(3);// SNAPSHOT 7

    }

  • void say_hello(void) {printf("hello\n");// SNAPSHOT 2

    }

    int foo(int a) {int b = 2;if (a < 0) {

    int c = a * a;// SNAPSHOT 4return a * b * c;

    } else if (a > 0) {int d = a * -1;// SNAPSHOT 6return a * b * d;

    }return 0;

    }

    int main(void) {// SNAPSHOT 1say_hello();// SNAPSHOT 3int z = foo(-4);// SNAPSHOT 5int y = foo(3);// SNAPSHOT 7

    }

    STACK

    READ-ONLY GLOBAL DATA

    mainz: -128y: ???r/a: OS

    fooa: 3b: 2c: ???d: -3

    r/a: main ●

  • void say_hello(void) {printf("hello\n");// SNAPSHOT 2

    }

    int foo(int a) {int b = 2;if (a < 0) {

    int c = a * a;// SNAPSHOT 4return a * b * c;

    } else if (a > 0) {int d = a * -1;// SNAPSHOT 6return a * b * d;

    }return 0;

    }

    int main(void) {// SNAPSHOT 1say_hello();// SNAPSHOT 3int z = foo(-4);// SNAPSHOT 5int y = foo(3);// SNAPSHOT 7

    }

    STACK

    READ-ONLY GLOBAL DATA

    mainz: -128y: -18r/a: OS

  • Memory SnapshotsExample 4Shadowing (Avoid This)

  • STACK

    int n = 1;

    int main(void) {printf("%d\n", n); // 1int n = 2;printf("%d\n", n); // 2{int n = 3;printf("%d\n", n); // 3

    }printf("%d\n", n); // 2// SNAPSHOT

    }

    READ-ONLY GLOBAL DATAn: 1

    mainn0: 2n1: 3r/a: OS

  • STACK

    int n = 1;

    int main(void) {printf("%d\n", n); // 1int n0 = 2;printf("%d\n", n0); // 2{int n1 = 3;printf("%d\n", n1); // 3

    }printf("%d\n", n0); // 2// SNAPSHOT

    }

    READ-ONLY GLOBAL DATAn: 1

    mainn0: 2n1: 3r/a: OS

  • Memory SnapshotsExample 5

    Mutation & Loops

  • STACK

    int g = 5;

    void foo(int a) {int b = 2;// SNAPSHOT 1b += a;// SNAPSHOT 2g += 2;// SHAPSHOT 3a++;// SNAPSHOT 4int i = 2;while (i >= 0) {// SNAPSHOT 5, 6, 7printf("%d\n", i);--i;

    }// SNAPSHOT 8

    }

    int main(void) {int z = 1;foo(z);

    }

    READ-ONLY GLOBAL DATAg: 5

    mainz: 1r/a: OS

    fooa: 1b: 2i: ???r/a: main ●

  • STACK

    int g = 5;

    void foo(int a) {int b = 2;// SNAPSHOT 1b += a;// SNAPSHOT 2g += 2;// SHAPSHOT 3a++;// SNAPSHOT 4int i = 2;while (i >= 0) {// SNAPSHOT 5, 6, 7printf("%d\n", i);--i;

    }// SNAPSHOT 8

    }

    int main(void) {int z = 1;foo(z);

    }

    READ-ONLY GLOBAL DATAg: 5

    mainz: 1r/a: OS

    fooa: 1b: 3i: ???r/a: main ●

  • STACK

    int g = 5;

    void foo(int a) {int b = 2;// SNAPSHOT 1b += a;// SNAPSHOT 2g += 2;// SHAPSHOT 3a++;// SNAPSHOT 4int i = 2;while (i >= 0) {// SNAPSHOT 5, 6, 7printf("%d\n", i);--i;

    }// SNAPSHOT 8

    }

    int main(void) {int z = 1;foo(z);

    }

    READ-ONLY GLOBAL DATAg: 7

    mainz: 1r/a: OS

    fooa: 1b: 3i: ???r/a: main ●

  • STACK

    int g = 5;

    void foo(int a) {int b = 2;// SNAPSHOT 1b += a;// SNAPSHOT 2g += 2;// SHAPSHOT 3a++;// SNAPSHOT 4int i = 2;while (i >= 0) {// SNAPSHOT 5, 6, 7printf("%d\n", i);--i;

    }// SNAPSHOT 8

    }

    int main(void) {int z = 1;foo(z);

    }

    READ-ONLY GLOBAL DATAg: 7

    mainz: 1r/a: OS

    fooa: 2b: 3i: ???r/a: main ●

  • STACK

    int g = 5;

    void foo(int a) {int b = 2;// SNAPSHOT 1b += a;// SNAPSHOT 2g += 2;// SHAPSHOT 3a++;// SNAPSHOT 4int i = 2;while (i >= 0) {// SNAPSHOT 5, 6, 7printf("%d\n", i);--i;

    }// SNAPSHOT 8

    }

    int main(void) {int z = 1;foo(z);

    }

    READ-ONLY GLOBAL DATAg: 7

    mainz: 1r/a: OS

    fooa: 2b: 3i: 2r/a: main ●

  • STACK

    int g = 5;

    void foo(int a) {int b = 2;// SNAPSHOT 1b += a;// SNAPSHOT 2g += 2;// SHAPSHOT 3a++;// SNAPSHOT 4int i = 2;while (i >= 0) {// SNAPSHOT 5, 6, 7printf("%d\n", i);--i;

    }// SNAPSHOT 8

    }

    int main(void) {int z = 1;foo(z);

    }

    READ-ONLY GLOBAL DATAg: 7

    mainz: 1r/a: OS

    fooa: 2b: 3i: 1r/a: main ●

  • STACK

    int g = 5;

    void foo(int a) {int b = 2;// SNAPSHOT 1b += a;// SNAPSHOT 2g += 2;// SHAPSHOT 3a++;// SNAPSHOT 4int i = 2;while (i >= 0) {// SNAPSHOT 5, 6, 7printf("%d\n", i);--i;

    }// SNAPSHOT 8

    }

    int main(void) {int z = 1;foo(z);

    }

    READ-ONLY GLOBAL DATAg: 7

    mainz: 1r/a: OS

    fooa: 2b: 3i: 0r/a: main ●

  • STACK

    int g = 5;

    void foo(int a) {int b = 2;// SNAPSHOT 1b += a;// SNAPSHOT 2g += 2;// SHAPSHOT 3a++;// SNAPSHOT 4int i = 2;while (i >= 0) {// SNAPSHOT 5, 6, 7printf("%d\n", i);--i;

    }// SNAPSHOT 8

    }

    int main(void) {int z = 1;foo(z);

    }

    READ-ONLY GLOBAL DATAg: 7

    mainz: 1r/a: OS

    fooa: 2b: 3i: -1r/a: main ●

  • Memory SnapshotsExample 6

    Uninitialized Variables (yuck)and Variable Definition inside of a Loop

  • STACK

    void foo(int a) {int b;int c = 5;// SNAPSHOT 1c += b;// SNAPSHOT 2int i = 2;while (i >= 0) {// SNAPSHOT 3, 6int k = 0;// SNAPSHOT 4, 7++k;// SNAPSHOT 5, 8printf("%d\n", i);i -= k;

    }}

    int main(void) {int z = 1;foo(z);

    }

    READ-ONLY GLOBAL DATA

    mainz: 1r/a: OS

    fooa: 1b: ???c: 5i: ???k: ???r/a: main ●

  • STACK

    void foo(int a) {int b;int c = 5;// SNAPSHOT 1c += b;// SNAPSHOT 2int i = 2;while (i >= 0) {// SNAPSHOT 3, 6int k = 0;// SNAPSHOT 4, 7++k;// SNAPSHOT 5, 8printf("%d\n", i);i -= k;

    }}

    int main(void) {int z = 1;foo(z);

    }

    READ-ONLY GLOBAL DATA

    mainz: 1r/a: OS

    fooa: 1b: ???c: ???i: ???k: ???r/a: main ●

  • STACK

    void foo(int a) {int b;int c = 5;// SNAPSHOT 1c += b;// SNAPSHOT 2int i = 2;while (i >= 0) {// SNAPSHOT 3, 6int k = 0;// SNAPSHOT 4, 7++k;// SNAPSHOT 5, 8printf("%d\n", i);i -= k;

    }}

    int main(void) {int z = 1;foo(z);

    }

    READ-ONLY GLOBAL DATA

    mainz: 1r/a: OS

    fooa: 1b: ???c: ???i: 2k: ???r/a: main ●

  • STACK

    void foo(int a) {int b;int c = 5;// SNAPSHOT 1c += b;// SNAPSHOT 2int i = 2;while (i >= 0) {// SNAPSHOT 3, 6int k = 0;// SNAPSHOT 4, 7++k;// SNAPSHOT 5, 8printf("%d\n", i);i -= k;

    }}

    int main(void) {int z = 1;foo(z);

    }

    READ-ONLY GLOBAL DATA

    mainz: 1r/a: OS

    fooa: 1b: ???c: ???i: 2k: 0r/a: main ●

  • STACK

    void foo(int a) {int b;int c = 5;// SNAPSHOT 1c += b;// SNAPSHOT 2int i = 2;while (i >= 0) {// SNAPSHOT 3, 6int k = 0;// SNAPSHOT 4, 7++k;// SNAPSHOT 5, 8printf("%d\n", i);i -= k;

    }}

    int main(void) {int z = 1;foo(z);

    }

    READ-ONLY GLOBAL DATA

    mainz: 1r/a: OS

    fooa: 1b: ???c: ???i: 2k: 1r/a: main ●

  • STACK

    void foo(int a) {int b;int c = 5;// SNAPSHOT 1c += b;// SNAPSHOT 2int i = 2;while (i >= 0) {// SNAPSHOT 3, 6int k = 0;// SNAPSHOT 4, 7++k;// SNAPSHOT 5, 8printf("%d\n", i);i -= k;

    }}

    int main(void) {int z = 1;foo(z);

    }

    READ-ONLY GLOBAL DATA

    mainz: 1r/a: OS

    fooa: 1b: ???c: ???i: 1k: 1r/a: main ●

  • STACK

    void foo(int a) {int b;int c = 5;// SNAPSHOT 1c += b;// SNAPSHOT 2int i = 2;while (i >= 0) {// SNAPSHOT 3, 6int k = 0;// SNAPSHOT 4, 7++k;// SNAPSHOT 5, 8printf("%d\n", i);i -= k;

    }}

    int main(void) {int z = 1;foo(z);

    }

    READ-ONLY GLOBAL DATA

    mainz: 1r/a: OS

    fooa: 1b: ???c: ???i: 2k: 0r/a: main ●

  • STACK

    void foo(int a) {int b;int c = 5;// SNAPSHOT 1c += b;// SNAPSHOT 2int i = 2;while (i >= 0) {// SNAPSHOT 3, 6int k = 0;// SNAPSHOT 4, 7++k;// SNAPSHOT 5, 8printf("%d\n", i);i -= k;

    }}

    int main(void) {int z = 1;foo(z);

    }

    READ-ONLY GLOBAL DATA

    mainz: 1r/a: OS

    fooa: 1b: ???c: ???i: 2k: 1r/a: main ●

  • Memory SnapshotsExample 7

    Recursion, Recursion, Recursion ...

  • STACKint sum_first(int n) {int sum = 0;// SNAPSHOT 2, 3, 4if (n > 0) {sum = n + sum_first(n - 1);

    }// SNAPSHOT 5, 6, 7return sum;

    }

    int main(void) {// SNAPSHOT 1int a = sum_first(2);// SNAPSHOT 8

    }

    READ-ONLY GLOBAL DATA

    maina: ???r/a: OS

  • STACKint sum_first(int n) {int sum = 0;// SNAPSHOT 2, 3, 4if (n > 0) {sum = n + sum_first(n - 1);

    }// SNAPSHOT 5, 6, 7return sum;

    }

    int main(void) {// SNAPSHOT 1int a = sum_first(2);// SNAPSHOT 8

    }

    READ-ONLY GLOBAL DATA

    maina: ???r/a: OS

    sum_firstn: 2sum: 0r/a: main ●

  • STACKint sum_first(int n) {int sum = 0;// SNAPSHOT 2, 3, 4if (n > 0) {sum = n + sum_first(n - 1);

    }// SNAPSHOT 5, 6, 7return sum;

    }

    int main(void) {// SNAPSHOT 1int a = sum_first(2);// SNAPSHOT 8

    }

    READ-ONLY GLOBAL DATA

    maina: ???r/a: OS

    sum_firstn: 2sum: 0r/a: main ●

    sum_firstn: 1sum: 0r/a: sum_first ●

  • STACKint sum_first(int n) {int sum = 0;// SNAPSHOT 2, 3, 4if (n > 0) {sum = n + sum_first(n - 1);

    }// SNAPSHOT 5, 6, 7return sum;

    }

    int main(void) {// SNAPSHOT 1int a = sum_first(2);// SNAPSHOT 8

    }

    READ-ONLY GLOBAL DATA

    maina: ???r/a: OS

    sum_firstn: 2sum: 0r/a: main ●

    sum_firstn: 1sum: 0r/a: sum_first ●

    sum_firstn: 0sum: 0r/a: sum_first ●

  • STACKint sum_first(int n) {int sum = 0;// SNAPSHOT 2, 3, 4if (n > 0) {sum = n + sum_first(n - 1);

    }// SNAPSHOT 5, 6, 7return sum;

    }

    int main(void) {// SNAPSHOT 1int a = sum_first(2);// SNAPSHOT 8

    }

    READ-ONLY GLOBAL DATA

    maina: ???r/a: OS

    sum_firstn: 2sum: 0r/a: main ●

    sum_firstn: 1sum: 0r/a: sum_first ●

    sum_firstn: 0sum: 0r/a: sum_first ●

  • STACKint sum_first(int n) {int sum = 0;// SNAPSHOT 2, 3, 4if (n > 0) {sum = n + sum_first(n - 1);

    }// SNAPSHOT 5, 6, 7return sum;

    }

    int main(void) {// SNAPSHOT 1int a = sum_first(2);// SNAPSHOT 8

    }

    READ-ONLY GLOBAL DATA

    maina: ???r/a: OS

    sum_firstn: 2sum: 0r/a: main ●

    sum_firstn: 1sum: 1r/a: sum_first ●

  • STACKint sum_first(int n) {int sum = 0;// SNAPSHOT 2, 3, 4if (n > 0) {sum = n + sum_first(n - 1);

    }// SNAPSHOT 5, 6, 7return sum;

    }

    int main(void) {// SNAPSHOT 1int a = sum_first(2);// SNAPSHOT 8

    }

    READ-ONLY GLOBAL DATA

    maina: ???r/a: OS

    sum_firstn: 2sum: 3r/a: main ●

  • STACKint sum_first(int n) {int sum = 0;// SNAPSHOT 2, 3, 4if (n > 0) {sum = n + sum_first(n - 1);

    }// SNAPSHOT 5, 6, 7return sum;

    }

    int main(void) {// SNAPSHOT 1int a = sum_first(2);// SNAPSHOT 8

    }

    READ-ONLY GLOBAL DATA

    maina: 3r/a: OS

  • Memory SnapshotsExample 8Introduction to Pointers

  • STACK

    int main(void) {int i = 5;int j = 6;int k = 7;// SNAPSHOT 1int *p = &i;int *q = &j;// SNAPSHOT 2int *r = NULL;// SNAPSHOT 3int *s = p;// SNAPSHOT 4int **d = &p;// SNAPSHOT 5

    }

    READ-ONLY GLOBAL DATA

    maini: 5j: 6k: 7p: ???q: ???r: ???s: ???d: ???r/a: OS

  • STACK

    maini: 5j: 6k: 7p: ●q: ●r: ???s: ???d: ???r/a: OS

    int main(void) {int i = 5;int j = 6;int k = 7;// SNAPSHOT 1int *p = &i;int *q = &j;// SNAPSHOT 2int *r = NULL;// SNAPSHOT 3int *s = p;// SNAPSHOT 4int **d = &p;// SNAPSHOT 5

    }

    READ-ONLY GLOBAL DATA

  • STACK

    maini: 5j: 6k: 7p: ●q: ●r: NULLs: ???d: ???r/a: OS

    int main(void) {int i = 5;int j = 6;int k = 7;// SNAPSHOT 1int *p = &i;int *q = &j;// SNAPSHOT 2int *r = NULL;// SNAPSHOT 3int *s = p;// SNAPSHOT 4int **d = &p;// SNAPSHOT 5

    }

    READ-ONLY GLOBAL DATA

  • STACK

    maini: 5j: 6k: 7p: ●q: ●r: NULLs: ●d: ???r/a: OS

    int main(void) {int i = 5;int j = 6;int k = 7;// SNAPSHOT 1int *p = &i;int *q = &j;// SNAPSHOT 2int *r = NULL;// SNAPSHOT 3int *s = p;// SNAPSHOT 4int **d = &p;// SNAPSHOT 5

    }

    READ-ONLY GLOBAL DATA

  • STACK

    maini: 5j: 6k: 7p: ●q: ●r: NULLs: ●d: ●r/a: OS

    int main(void) {int i = 5;int j = 6;int k = 7;// SNAPSHOT 1int *p = &i;int *q = &j;// SNAPSHOT 2int *r = NULL;// SNAPSHOT 3int *s = p;// SNAPSHOT 4int **d = &p;// SNAPSHOT 5

    }

    READ-ONLY GLOBAL DATA

  • Memory SnapshotsExample 9

    Pointers with Mutation

  • STACK

    maini: 5j: 6k: 7p: ●q: ●r: NULLs: ●d: ●r/a: OS

    int main(void) {int i = 5;int j = 6;int k = 7;int *p = &i;int *q = &j;int *r = NULL;int *s = p;int **d = &p;// SNAPSHOT 1p = &k;// SNAPSHOT 2r = q;// SNAPSHOT 3s = NULL;// SNAPSHOT 4d = &s;// SNAPSHOT 5*p = 10;// SNAPSHOT 6*p = *q;// SNAPSHOT 7*d = &i;// SNAPSHOT 8*d = p;// SNAPSHOT 9**d = 1;// SNAPSHOT 10

    }

    READ-ONLY GLOBAL DATA

  • STACK

    maini: 5j: 6k: 7p: ●q: ●r: NULLs: ●d: ●r/a: OS

    int main(void) {int i = 5;int j = 6;int k = 7;int *p = &i;int *q = &j;int *r = NULL;int *s = p;int **d = &p;// SNAPSHOT 1p = &k;// SNAPSHOT 2r = q;// SNAPSHOT 3s = NULL;// SNAPSHOT 4d = &s;// SNAPSHOT 5*p = 10;// SNAPSHOT 6*p = *q;// SNAPSHOT 7*d = &i;// SNAPSHOT 8*d = p;// SNAPSHOT 9**d = 1;// SNAPSHOT 10

    }

    READ-ONLY GLOBAL DATA

  • STACK

    maini: 5j: 6k: 7p: ●q: ●r: ●s: ●d: ●r/a: OS

    int main(void) {int i = 5;int j = 6;int k = 7;int *p = &i;int *q = &j;int *r = NULL;int *s = p;int **d = &p;// SNAPSHOT 1p = &k;// SNAPSHOT 2r = q;// SNAPSHOT 3s = NULL;// SNAPSHOT 4d = &s;// SNAPSHOT 5*p = 10;// SNAPSHOT 6*p = *q;// SNAPSHOT 7*d = &i;// SNAPSHOT 8*d = p;// SNAPSHOT 9**d = 1;// SNAPSHOT 10

    }

    READ-ONLY GLOBAL DATA

  • STACK

    maini: 5j: 6k: 7p: ●q: ●r: ●s: NULLd: ●r/a: OS

    int main(void) {int i = 5;int j = 6;int k = 7;int *p = &i;int *q = &j;int *r = NULL;int *s = p;int **d = &p;// SNAPSHOT 1p = &k;// SNAPSHOT 2r = q;// SNAPSHOT 3s = NULL;// SNAPSHOT 4d = &s;// SNAPSHOT 5*p = 10;// SNAPSHOT 6*p = *q;// SNAPSHOT 7*d = &i;// SNAPSHOT 8*d = p;// SNAPSHOT 9**d = 1;// SNAPSHOT 10

    }

    READ-ONLY GLOBAL DATA

  • STACK

    maini: 5j: 6k: 7p: ●q: ●r: ●s: NULLd: ●r/a: OS

    int main(void) {int i = 5;int j = 6;int k = 7;int *p = &i;int *q = &j;int *r = NULL;int *s = p;int **d = &p;// SNAPSHOT 1p = &k;// SNAPSHOT 2r = q;// SNAPSHOT 3s = NULL;// SNAPSHOT 4d = &s;// SNAPSHOT 5*p = 10;// SNAPSHOT 6*p = *q;// SNAPSHOT 7*d = &i;// SNAPSHOT 8*d = p;// SNAPSHOT 9**d = 1;// SNAPSHOT 10

    }

    READ-ONLY GLOBAL DATA

  • STACK

    maini: 5j: 6k: 10p: ●q: ●r: ●s: NULLd: ●r/a: OS

    int main(void) {int i = 5;int j = 6;int k = 7;int *p = &i;int *q = &j;int *r = NULL;int *s = p;int **d = &p;// SNAPSHOT 1p = &k;// SNAPSHOT 2r = q;// SNAPSHOT 3s = NULL;// SNAPSHOT 4d = &s;// SNAPSHOT 5*p = 10;// SNAPSHOT 6*p = *q;// SNAPSHOT 7*d = &i;// SNAPSHOT 8*d = p;// SNAPSHOT 9**d = 1;// SNAPSHOT 10

    }

    READ-ONLY GLOBAL DATA

  • STACK

    maini: 5j: 6k: 6p: ●q: ●r: ●s: NULLd: ●r/a: OS

    int main(void) {int i = 5;int j = 6;int k = 7;int *p = &i;int *q = &j;int *r = NULL;int *s = p;int **d = &p;// SNAPSHOT 1p = &k;// SNAPSHOT 2r = q;// SNAPSHOT 3s = NULL;// SNAPSHOT 4d = &s;// SNAPSHOT 5*p = 10;// SNAPSHOT 6*p = *q;// SNAPSHOT 7*d = &i;// SNAPSHOT 8*d = p;// SNAPSHOT 9**d = 1;// SNAPSHOT 10

    }

    READ-ONLY GLOBAL DATA

  • STACK

    maini: 5j: 6k: 6p: ●q: ●r: ●s: ●d: ●r/a: OS

    int main(void) {int i = 5;int j = 6;int k = 7;int *p = &i;int *q = &j;int *r = NULL;int *s = p;int **d = &p;// SNAPSHOT 1p = &k;// SNAPSHOT 2r = q;// SNAPSHOT 3s = NULL;// SNAPSHOT 4d = &s;// SNAPSHOT 5*p = 10;// SNAPSHOT 6*p = *q;// SNAPSHOT 7*d = &i;// SNAPSHOT 8*d = p;// SNAPSHOT 9**d = 1;// SNAPSHOT 10

    }

    READ-ONLY GLOBAL DATA

  • STACK

    maini: 5j: 6k: 6p: ●q: ●r: ●s: ●d: ●r/a: OS

    int main(void) {int i = 5;int j = 6;int k = 7;int *p = &i;int *q = &j;int *r = NULL;int *s = p;int **d = &p;// SNAPSHOT 1p = &k;// SNAPSHOT 2r = q;// SNAPSHOT 3s = NULL;// SNAPSHOT 4d = &s;// SNAPSHOT 5*p = 10;// SNAPSHOT 6*p = *q;// SNAPSHOT 7*d = &i;// SNAPSHOT 8*d = p;// SNAPSHOT 9**d = 1;// SNAPSHOT 10

    }

    READ-ONLY GLOBAL DATA

  • STACK

    maini: 5j: 6k: 1p: ●q: ●r: ●s: ●d: ●r/a: OS

    int main(void) {int i = 5;int j = 6;int k = 7;int *p = &i;int *q = &j;int *r = NULL;int *s = p;int **d = &p;// SNAPSHOT 1p = &k;// SNAPSHOT 2r = q;// SNAPSHOT 3s = NULL;// SNAPSHOT 4d = &s;// SNAPSHOT 5*p = 10;// SNAPSHOT 6*p = *q;// SNAPSHOT 7*d = &i;// SNAPSHOT 8*d = p;// SNAPSHOT 9**d = 1;// SNAPSHOT 10

    }

    READ-ONLY GLOBAL DATA

  • Memory SnapshotsExample 10

    Pointer Parameters and Structures

  • mainz: 1p:r/a: OS

    struct posn {int x;int y;

    };

    int g = 5;

    void add1(int *a) {*a += 1;// SNAPSHOT 2, 3, 4, 7

    }

    void posn_add1(struct posn *s) {// SNAPSHOT 5s->x += 1;// SNAPSHOT 6add1(&s->y);

    }

    int main(void) {int z = 1;struct posn p = {3, 7};// SNAPSHOT 1add1(&z);add1(&g);add1(&p.x);posn_add1(&p);// SNAPSHOT 8

    }

    READ-ONLY GLOBAL DATAg: 5

    3 7

  • mainz: 1p: .x: 3 .y: 7r/a: OS

    struct posn {int x;int y;

    };

    int g = 5;

    void add1(int *a) {*a += 1;// SNAPSHOT 2, 3, 4, 7

    }

    void posn_add1(struct posn *s) {// SNAPSHOT 5s->x += 1;// SNAPSHOT 6add1(&s->y);

    }

    int main(void) {int z = 1;struct posn p = {3, 7};// SNAPSHOT 1add1(&z);add1(&g);add1(&p.x);posn_add1(&p);// SNAPSHOT 8

    }

    READ-ONLY GLOBAL DATAg: 5

  • mainz: 2p: .x: 3 .y: 7r/a: OS

    struct posn {int x;int y;

    };

    int g = 5;

    void add1(int *a) {*a += 1;// SNAPSHOT 2, 3, 4, 7

    }

    void posn_add1(struct posn *s) {// SNAPSHOT 5s->x += 1;// SNAPSHOT 6add1(&s->y);

    }

    int main(void) {int z = 1;struct posn p = {3, 7};// SNAPSHOT 1add1(&z);add1(&g);add1(&p.x);posn_add1(&p);// SNAPSHOT 8

    }

    READ-ONLY GLOBAL DATAg: 5

    add1a: ●

    r/a: main ●

  • mainz: 2p: .x: 3 .y: 7r/a: OS

    struct posn {int x;int y;

    };

    int g = 5;

    void add1(int *a) {*a += 1;// SNAPSHOT 2, 3, 4, 7

    }

    void posn_add1(struct posn *s) {// SNAPSHOT 5s->x += 1;// SNAPSHOT 6add1(&s->y);

    }

    int main(void) {int z = 1;struct posn p = {3, 7};// SNAPSHOT 1add1(&z);add1(&g);add1(&p.x);posn_add1(&p);// SNAPSHOT 8

    }

    READ-ONLY GLOBAL DATAg: 6

    add1a: ●

    r/a: main ●

  • mainz: 2p: .x: 4 .y: 7r/a: OS

    struct posn {int x;int y;

    };

    int g = 5;

    void add1(int *a) {*a += 1;// SNAPSHOT 2, 3, 4, 7

    }

    void posn_add1(struct posn *s) {// SNAPSHOT 5s->x += 1;// SNAPSHOT 6add1(&s->y);

    }

    int main(void) {int z = 1;struct posn p = {3, 7};// SNAPSHOT 1add1(&z);add1(&g);add1(&p.x);posn_add1(&p);// SNAPSHOT 8

    }

    READ-ONLY GLOBAL DATAg: 6

    add1a: ●

    r/a: main ●

  • mainz: 2p: .x: 4 .y: 7r/a: OS

    struct posn {int x;int y;

    };

    int g = 5;

    void add1(int *a) {*a += 1;// SNAPSHOT 2, 3, 4, 7

    }

    void posn_add1(struct posn *s) {// SNAPSHOT 5s->x += 1;// SNAPSHOT 6add1(&s->y);

    }

    int main(void) {int z = 1;struct posn p = {3, 7};// SNAPSHOT 1add1(&z);add1(&g);add1(&p.x);posn_add1(&p);// SNAPSHOT 8

    }

    READ-ONLY GLOBAL DATAg: 6

    posn_add1s: ●

    r/a: main ●

  • mainz: 2p: .x: 5 .y: 7r/a: OS

    struct posn {int x;int y;

    };

    int g = 5;

    void add1(int *a) {*a += 1;// SNAPSHOT 2, 3, 4, 7

    }

    void posn_add1(struct posn *s) {// SNAPSHOT 5s->x += 1;// SNAPSHOT 6add1(&s->y);

    }

    int main(void) {int z = 1;struct posn p = {3, 7};// SNAPSHOT 1add1(&z);add1(&g);add1(&p.x);posn_add1(&p);// SNAPSHOT 8

    }

    READ-ONLY GLOBAL DATAg: 6

    posn_add1s: ●

    r/a: main ●

  • mainz: 2p: .x: 5 .y: 8r/a: OS

    struct posn {int x;int y;

    };

    int g = 5;

    void add1(int *a) {*a += 1;// SNAPSHOT 2, 3, 4, 7

    }

    void posn_add1(struct posn *s) {// SNAPSHOT 5s->x += 1;// SNAPSHOT 6add1(&s->y);

    }

    int main(void) {int z = 1;struct posn p = {3, 7};// SNAPSHOT 1add1(&z);add1(&g);add1(&p.x);posn_add1(&p);// SNAPSHOT 8

    }

    READ-ONLY GLOBAL DATAg: 6

    posn_add1s: ●

    r/a: main ●

    add1a: ●

    r/a: posn_add1 ●

  • mainz: 2p: .x: 5 .y: 8r/a: OS

    struct posn {int x;int y;

    };

    int g = 5;

    void add1(int *a) {*a += 1;// SNAPSHOT 2, 3, 4, 7

    }

    void posn_add1(struct posn *s) {// SNAPSHOT 5s->x += 1;// SNAPSHOT 6add1(&s->y);

    }

    int main(void) {int z = 1;struct posn p = {3, 7};// SNAPSHOT 1add1(&z);add1(&g);add1(&p.x);posn_add1(&p);// SNAPSHOT 8

    }

    READ-ONLY GLOBAL DATAg: 6