AUTOMATING COMPILATION C++ MEMORY MODEL · 2020-03-05 · Demo • Basics of code compilation in...
Transcript of AUTOMATING COMPILATION C++ MEMORY MODEL · 2020-03-05 · Demo • Basics of code compilation in...
![Page 1: AUTOMATING COMPILATION C++ MEMORY MODEL · 2020-03-05 · Demo • Basics of code compilation in C++ (review) • Makefiles (used to automate compilation of medium to large projects)](https://reader030.fdocuments.us/reader030/viewer/2022040902/5e73ecccf332fb5a6a4bd336/html5/thumbnails/1.jpg)
AUTOMATING COMPILATION C++ MEMORY MODEL
Problem Solving with Computers-I
![Page 2: AUTOMATING COMPILATION C++ MEMORY MODEL · 2020-03-05 · Demo • Basics of code compilation in C++ (review) • Makefiles (used to automate compilation of medium to large projects)](https://reader030.fdocuments.us/reader030/viewer/2022040902/5e73ecccf332fb5a6a4bd336/html5/thumbnails/2.jpg)
Pointer Diagrams (Review)
int *p = arr;p = p + 1;*p = *p + 1;
Draw the array ar after the above code is executed
int ar[]={20, 30, 50, 80, 90}; P intr
pint
pointerint o ooo as sizeof int p int
nt sq Ip 11 0 9000 I sizeof Cintra
0 8004ar048tw X09
0 f 2 3 4
ofaoootDI.gr
![Page 3: AUTOMATING COMPILATION C++ MEMORY MODEL · 2020-03-05 · Demo • Basics of code compilation in C++ (review) • Makefiles (used to automate compilation of medium to large projects)](https://reader030.fdocuments.us/reader030/viewer/2022040902/5e73ecccf332fb5a6a4bd336/html5/thumbnails/3.jpg)
Which of the following is true after IncrementPtr(q)is called in the above code:
void IncrementPtr(int *p){ p++; }
50 60 70arr
qint arr[3] = {50, 60, 70}; int *q = arr; IncrementPtr(q);
A. ‘q’ points to the next element in the array with value 60 B. ‘q’ points to the first element in the array with value 50
PYEint mainC
return oah
oxoooo IJgjO l 2
![Page 4: AUTOMATING COMPILATION C++ MEMORY MODEL · 2020-03-05 · Demo • Basics of code compilation in C++ (review) • Makefiles (used to automate compilation of medium to large projects)](https://reader030.fdocuments.us/reader030/viewer/2022040902/5e73ecccf332fb5a6a4bd336/html5/thumbnails/4.jpg)
How should we implement IncrementPtr(),so that ‘q’ points to 60 when the following code executes? void IncrementPtr(int **p){ p++; }
50 60 70arr
qint arr[3] = {50, 60, 70}; int *q = arr; IncrementPtr(&q);
A. p = p + 1; B. &p = &p + 1; C. *p= *p + 1; D. p= &p+1;
9 9 1
as
O sap
p a p t I
![Page 5: AUTOMATING COMPILATION C++ MEMORY MODEL · 2020-03-05 · Demo • Basics of code compilation in C++ (review) • Makefiles (used to automate compilation of medium to large projects)](https://reader030.fdocuments.us/reader030/viewer/2022040902/5e73ecccf332fb5a6a4bd336/html5/thumbnails/5.jpg)
The compilation processSource code
Source code: Text file stored on computers hard disk or some secondary storage
Compiler
Hardware
Executable: Program in machine code +Data in binary
1000110001100010000000000000000 1000110011110010000000000000100 1010110011110010000000000000000 1010110001100010000000000000100
Run Time
hello.cpp g++ a.out
Executable
![Page 6: AUTOMATING COMPILATION C++ MEMORY MODEL · 2020-03-05 · Demo • Basics of code compilation in C++ (review) • Makefiles (used to automate compilation of medium to large projects)](https://reader030.fdocuments.us/reader030/viewer/2022040902/5e73ecccf332fb5a6a4bd336/html5/thumbnails/6.jpg)
g++ is composed of a number of smaller programs• Code written by others (libraries) can be included • ld (linkage editor) merges one or more object files with the relevant
libraries to produce a single executable
hello.cppa.out
6
g++
hello.sas
cpp
cc1
ld
Library files e.g.math.o: the math library
hello.o
![Page 7: AUTOMATING COMPILATION C++ MEMORY MODEL · 2020-03-05 · Demo • Basics of code compilation in C++ (review) • Makefiles (used to automate compilation of medium to large projects)](https://reader030.fdocuments.us/reader030/viewer/2022040902/5e73ecccf332fb5a6a4bd336/html5/thumbnails/7.jpg)
Steps in gcc• Ask compiler to show temporary files: $ g++ –S hello.cpp $ g++ –c hello.o $ g++ –o hello hello.cpp $ g++ functions.o main.o –o myhello
hello.cpp a.out
g++hello.s
as
cpp
cc1
ldhello.o
![Page 8: AUTOMATING COMPILATION C++ MEMORY MODEL · 2020-03-05 · Demo • Basics of code compilation in C++ (review) • Makefiles (used to automate compilation of medium to large projects)](https://reader030.fdocuments.us/reader030/viewer/2022040902/5e73ecccf332fb5a6a4bd336/html5/thumbnails/8.jpg)
Make and makefiles• The unix make program automates the compilation process as specified in a
Makefile • Specifies how the different pieces of a program in different files fit together to make
a complete program • In the makefile you provide a recipe for compilation • When you run make it will use that recipe to compile the program
$ make g++ testShapes.o shapes.o tdd.o -o testShapes
![Page 9: AUTOMATING COMPILATION C++ MEMORY MODEL · 2020-03-05 · Demo • Basics of code compilation in C++ (review) • Makefiles (used to automate compilation of medium to large projects)](https://reader030.fdocuments.us/reader030/viewer/2022040902/5e73ecccf332fb5a6a4bd336/html5/thumbnails/9.jpg)
Specifying a recipe in the makefile• Comments start with a # • Definitions typically are a variable in all caps
followed by an equals sign and a string, such as:
# testShapes is the target - it is what we want to produce # To produce the executable testShapes we need all the .o files # Everything to the right of ":" is a dependency for testShapes
testShapes: testShapes.o shapes.o tdd.o #The recipe for producing the target (testshapes) is below g++ testShapes.o shapes.o tdd.o -o testShapes
![Page 10: AUTOMATING COMPILATION C++ MEMORY MODEL · 2020-03-05 · Demo • Basics of code compilation in C++ (review) • Makefiles (used to automate compilation of medium to large projects)](https://reader030.fdocuments.us/reader030/viewer/2022040902/5e73ecccf332fb5a6a4bd336/html5/thumbnails/10.jpg)
Demo• Basics of code compilation in C++ (review) • Makefiles (used to automate compilation of medium to large projects) consisting of
many files • We will start by using a makefile to compile just a single program • Extend to the case where your program is split between multiple files • Understand what each of the following are and how they are used in program
compilation • Header file (.h) • Source file (.cpp) • Object file (.o) • Executable • Makefile • Compile-time errors • Link-time errors
![Page 11: AUTOMATING COMPILATION C++ MEMORY MODEL · 2020-03-05 · Demo • Basics of code compilation in C++ (review) • Makefiles (used to automate compilation of medium to large projects)](https://reader030.fdocuments.us/reader030/viewer/2022040902/5e73ecccf332fb5a6a4bd336/html5/thumbnails/11.jpg)
Dynamic Memory & Heap vs Stack
![Page 12: AUTOMATING COMPILATION C++ MEMORY MODEL · 2020-03-05 · Demo • Basics of code compilation in C++ (review) • Makefiles (used to automate compilation of medium to large projects)](https://reader030.fdocuments.us/reader030/viewer/2022040902/5e73ecccf332fb5a6a4bd336/html5/thumbnails/12.jpg)
The case of the disappearing data!int getInt(){
int x=5; return x;
} int* getAddressOfInt(){
int x=10; return &x;
} int main(){ int y=0, *p=nullptr, z=0; y = getInt(); p = getAddressOfInt(); z = *p; cout<<y<<", "<<z<<", "<<*p<<endl; }
What is the output?
A. 5, 0, 10 B. 5, 10, 10 C. Something else
omain P
C
![Page 13: AUTOMATING COMPILATION C++ MEMORY MODEL · 2020-03-05 · Demo • Basics of code compilation in C++ (review) • Makefiles (used to automate compilation of medium to large projects)](https://reader030.fdocuments.us/reader030/viewer/2022040902/5e73ecccf332fb5a6a4bd336/html5/thumbnails/13.jpg)
C++ Memory Model: Stack• Stack: Segment of memory
managed automatically using a Last in First Out (LIFO) principle
• Think of it like a stack of books!
1
![Page 14: AUTOMATING COMPILATION C++ MEMORY MODEL · 2020-03-05 · Demo • Basics of code compilation in C++ (review) • Makefiles (used to automate compilation of medium to large projects)](https://reader030.fdocuments.us/reader030/viewer/2022040902/5e73ecccf332fb5a6a4bd336/html5/thumbnails/14.jpg)
C++ Memory Model: Heap• Heap: Segment of memory
managed by the programmer
• Data created on the heap stays there
– FOREVER or
– until the programmer explicitly deletes it
![Page 15: AUTOMATING COMPILATION C++ MEMORY MODEL · 2020-03-05 · Demo • Basics of code compilation in C++ (review) • Makefiles (used to automate compilation of medium to large projects)](https://reader030.fdocuments.us/reader030/viewer/2022040902/5e73ecccf332fb5a6a4bd336/html5/thumbnails/15.jpg)
Creating data on the Heap: new
To allocate memory on the heap use the new operator
![Page 16: AUTOMATING COMPILATION C++ MEMORY MODEL · 2020-03-05 · Demo • Basics of code compilation in C++ (review) • Makefiles (used to automate compilation of medium to large projects)](https://reader030.fdocuments.us/reader030/viewer/2022040902/5e73ecccf332fb5a6a4bd336/html5/thumbnails/16.jpg)
Deleting data on the Heap: delete
To free memory on the heap use the delete operator
![Page 17: AUTOMATING COMPILATION C++ MEMORY MODEL · 2020-03-05 · Demo • Basics of code compilation in C++ (review) • Makefiles (used to automate compilation of medium to large projects)](https://reader030.fdocuments.us/reader030/viewer/2022040902/5e73ecccf332fb5a6a4bd336/html5/thumbnails/17.jpg)
Dynamic memory management = Managing data on the heap
int* p= new int; //creates a new integer on the heap
SuperHero* n = new SuperHero;
//creates a new Student on the heap
delete p; //Frees the integer
delete n; //Frees the Student
![Page 18: AUTOMATING COMPILATION C++ MEMORY MODEL · 2020-03-05 · Demo • Basics of code compilation in C++ (review) • Makefiles (used to automate compilation of medium to large projects)](https://reader030.fdocuments.us/reader030/viewer/2022040902/5e73ecccf332fb5a6a4bd336/html5/thumbnails/18.jpg)
Solve the case of the disappearing data!int getInt(){
int x=5; return x;
} int* getAddressOfInt(){
int x=10; return &x;
} int main(){ int y=0, *p=nullptr, z=0; y = getInt(); p = getAddressOfInt(); z = *p; cout<<y<<", "<<z<<", "<<*p<<endl; }
Change the code so that *p does not disappear
Desired output: 5, 10, 10
![Page 19: AUTOMATING COMPILATION C++ MEMORY MODEL · 2020-03-05 · Demo • Basics of code compilation in C++ (review) • Makefiles (used to automate compilation of medium to large projects)](https://reader030.fdocuments.us/reader030/viewer/2022040902/5e73ecccf332fb5a6a4bd336/html5/thumbnails/19.jpg)
Heap vs. stack 1 #include <iostream> 2 using namespace std; 3 4 int* createAnIntArray(int len){ 5 6 int arr[len]; 7 return arr; 8 9 }
Does the above function correctly return an array of integers? A. Yes B. No
![Page 20: AUTOMATING COMPILATION C++ MEMORY MODEL · 2020-03-05 · Demo • Basics of code compilation in C++ (review) • Makefiles (used to automate compilation of medium to large projects)](https://reader030.fdocuments.us/reader030/viewer/2022040902/5e73ecccf332fb5a6a4bd336/html5/thumbnails/20.jpg)
Next time• Dynamic Memory Pitfalls • Linked Lists