PowerPoint Presentation · Stack Memory 0xffff00f0 0xffff00e8 0xffff00e0 0xffff00d8 0xffff00d0...

Preview:

Citation preview

CS 225 Data Structures

#ifndef SPHERE_H

#define SPHERE_H

namespace cs225 {

class Sphere {

public:

Sphere();

Sphere(double r);

double getRadius();

double getVolume();

private:

double r_;

};

}

#endif

sphere.h 1 2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

#include "sphere.h"

namespace cs225 {

Sphere::Sphere() {

}

Sphere::Sphere(double r) {

r_ = r;

// …lots of other logic…

}

double Sphere::getRadius() {

return r_;

}

double Sphere::getVolume() {

return (4 * r_ * r_ * r_ *

3.14159265) / 3.0;

}

}

sphere.cpp 1 2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

Stack Memory 0xffff00f0

0xffff00e8

0xffff00e0

0xffff00d8

0xffff00d0

0xffff00c8

0xffff00c0

0xffff00b8

0xffff00b0

0xffff00a8

Location Value Type Name int main() {

int a;

int b = -3;

int c = 12345;

int *p = &b;

return 0;

}

1 2

3

4

5

6

7

8

9

0xffff00f0

0xffff00e8

0xffff00e0

0xffff00d8

0xffff00d0

0xffff00c8

0xffff00c0

0xffff00b8

0xffff00b0

0xffff00a8

example1.cpp

#include <iostream>

int main() {

std::cout << sizeof(int) << std::endl;

return 0;

}

sizeof-int.cpp 1 2

3

4

5

6

#include <iostream>

int main() {

std::cout << sizeof(int *) << std::endl;

return 0;

}

sizeof-intptr.cpp 1 2

3

4

5

6

Location Value Type Name int main() {

int a;

int b = -3;

int c = 12345;

int *p = &b;

return 0;

}

1 2

3

4

5

6

7

8

9

&a: 0x7ffe2ee87218

&b: 0x7ffe2ee87214

&c: 0x7ffe2ee87210

&p: 0x7ffe2ee87208

Real results when running on linus.ews.illinois.edu

0x7ffe2ee87228

0x7ffe2ee87220

0x7ffe2ee87218

0x7ffe2ee87210

0x7ffe2ee87208

0x7ffe2ee87200

0x7ffe2ee871f8

0x7ffe2ee871f0

0x7ffe2ee871e8

0x7ffe2ee871e0

example1.cpp

Location Value Type Name #include "sphere.h"

int main() {

cs225::Sphere s;

cs225::Sphere *p = &s;

return 0;

}

1 2

3

4

5

6

7

8

9

0xffff00f0

0xffff00e8

0xffff00e0

0xffff00d8

0xffff00d0

0xffff00c8

0xffff00c0

0xffff00b8

0xffff00b0

0xffff00a8

example2.cpp

#include <iostream>

#include "sphere.h"

int main() {

std::cout << sizeof(cs225::Sphere) << std::endl;

std::cout << sizeof(cs225::Sphere *) << std::endl;

return 0;

}

sizeof-sphere.cpp 1 2

3

4

5

6

7

8

Stack Frames int hello() {

int a = 100;

return a;

}

int main() {

int a;

int b = -3;

int c = hello();

int d = 42;

return 0;

}

1 2

3

4

5

6

7

8

9

10

11

12

13

0xffff00f0

0xffff00e8

0xffff00e0

0xffff00d8

0xffff00d0

0xffff00c8

0xffff00c0

0xffff00b8

0xffff00b0

0xffff00a8

stackframe.cpp

Return Values

Location Value Type Name #include "sphere.h"

using namespace cs225;

Sphere *CreateUnitSphere() {

Sphere s(1);

return &s;

}

int main() {

Sphere *s = CreateUnitSphere();

double r = s->getRadius();

double v = s->getVolume();

return 0;

}

1 2

3

4

5

6

7

8

9

10

11

12

13

14

0xffff00f0

0xffff00e8

0xffff00e0

0xffff00d8

0xffff00d0

0xffff00c8

0xffff00c0

0xffff00b8

0xffff00b0

0xffff00a8

sphere-badCreate.cpp

Location Value Type Name

0xffff00f0

0xffff00e8

0xffff00e0

0xffff00d8

0xffff00d0

0xffff00c8

0xffff00c0

0xffff00b8

0xffff00b0

0xffff00a8

#include "sphere.h"

using namespace cs225;

Sphere *CreateUnitSphere() {

Sphere s(1);

return &s;

}

int main() {

Sphere *s = CreateUnitSphere();

double r = s->getRadius();

double v = s->getVolume();

return 0;

}

1 2

3

4

5

6

7

8

9

10

11

12

13

14

sphere-badCreate.cpp

Location Value Type Name

0xffff00f0

0xffff00e8

0xffff00e0

0xffff00d8

0xffff00d0

0xffee00f0

0xffee00e8

0xffee00e0

0xffee00d8

0xffee00d0

#include "sphere.h"

using namespace cs225;

Sphere *CreateUnitSphere() {

Sphere s(1);

return &s;

}

int main() {

Sphere *s = CreateUnitSphere();

double r = s->getRadius();

double v = s->getVolume();

return 0;

}

1 2

3

4

5

6

7

8

9

10

11

12

13

14

sphere-badCreate.cpp

What happens on a real system?

0xffee00f0

0xffee00e8

0xffee00e0

0xffee00d8

0xffee00d0

&s (CreateUnitSphere): 0x7ffee6bf5ca8

1

s->getRadius(): 2.07941e-317

&s (main): 0x7ffee6bf5d30

s (main): 0x7ffee6bf5ca8

&r (main): 0x7ffee6bf5d28

r (main): 6.95312e-310

&v (main): 0x7ffee6bf5d20

v (main): 0

Real results when running on linus.ews.illinois.edu

0x7ffee6bf5d38

0x7ffee6bf5d30

0x7ffee6bf5d28

0x7ffee6bf5d20

0x7ffee6bf5d18

int main() {

Sphere *s = CreateUnitSphere();

cout << s->getRadius() << endl;

cout << "s->getRadius(): “

<< s->getRadius() << endl;

cout << "&s (main): " << &s << endl;

cout << " s (main): " << s << endl;

double r = s->getRadius();

cout << "&r (main): " << &r << endl;

cout << " r (main): " << r << endl;

double v = s->getVolume();

cout << "&v (main): " << &v << endl;

cout << " v (main): " << v << endl;

}

13

14

15

16

17

18

19

20

21

22

23

24

25

0x7ffee6bf5cb0

0x7ffee6bf5ca8

0x7ffee6bf5ca0

0x7ffee6bf5c98

0x7ffee6bf5c90

(0x60 bytes not shown)

Stack Memory vs. Heap Memory

0x42000

0x42008

0x42010

0x42018

0x42020

0x42028

0x42030

0x42038

0x42040

0x42048 0xffff00f0

0xffff00e8

0xffff00e0

0xffff00d8

0xffff00d0

0xffff00c8

0xffff00c0

0xffff00b8

0xffff00b0

0xffff00a8

Heap Memory

0x42000

0x42008

0x42010

0x42018

0x42020

0x42028

0x42030

0x42038

0x42040

0x42048

0x42000

0x42008

0x42010

0x42018

0x42020

0x42028

0x42030

0x42038

0x42040

0x42048

#include "sphere.h"

using namespace cs225;

int main() {

int *p = new int;

int *s = new Sphere(10);

return 0;

}

1 2

3

4

5

6

7

8

9

Location Value Type Name

0xffff00f0

0xffff00e8

0xffff00e0

0xffff00d8

0xffff00d0

Location Value Type Name

heap1.cpp

0x42000

0x42008

0x42010

0x42018

0x42020

0x42028

0x42030

0x42038

0x42040

0x42048

Location Value Type Name

0xffff00f0

0xffff00e8

0xffff00e0

0xffff00d8

0xffff00d0

#include "sphere.h"

using namespace cs225;

int main() {

Sphere *s1 = new Sphere();

Sphere *s2 = s1;

s2->setRadius( 10 );

return 0;

}

1 2

3

4

5

6

7

8

9

10

11

heap2.cpp

#include <iostream>

using namespace std;

int main() {

int *p;

int x;

p = &x;

x = 6;

cout << x << endl;

cout << p << endl;

return 0;

}

extra-puzzle1.cpp 1 2

3

4

5

6

7

8

9

10

11

12

13

14

15

#include <iostream>

using namespace std;

int main() {

int *p, *q;

p = new int;

q = p;

*q = 8;

cout << *p << endl;

q = new int;

*q = 9;

cout << *p << endl;

cout << *q << endl;

return 0;

}

extra-puzzle2.cpp 1 2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

CS 225 – Things To Be Doing lab_intro Due Sunday by 11:59pm Make sure to turn in lab_intro by Sunday at 11:59pm

MP1 is out tonight! (after labs have finished) Due: Monday, Sept. 11th (weekend + week + weekend from now)

Office Hours are Starting Up… ~20 hours of office hours this weekend (Check “Calendar” on CS 225 website) - Having trouble with C++? - Having trouble with lab_intro? - Don’t understand something from lecture?

Have an awesome holiday weekend! …see you next Wednesday!

Recommended