Lecture 2: Subtleties of C - MIT OpenCourseWareAndre Kessler 6.S096 Lecture 2 16– Subtleties of C....
Transcript of Lecture 2: Subtleties of C - MIT OpenCourseWareAndre Kessler 6.S096 Lecture 2 16– Subtleties of C....
![Page 1: Lecture 2: Subtleties of C - MIT OpenCourseWareAndre Kessler 6.S096 Lecture 2 16– Subtleties of C. 12 / Images by MIT OpenCourseWare. Sign Fraction (23-bit) = 0.15625 31 23 0 Exponent](https://reader034.fdocuments.net/reader034/viewer/2022042807/5f7daeeb4a328911a824efbf/html5/thumbnails/1.jpg)
6.S096 Lecture 2 – Subtleties of CData structures and Floating-point arithmetic
Andre Kessler
Andre Kessler 6.S096 Lecture 2 – Subtleties of C 1 /16
![Page 2: Lecture 2: Subtleties of C - MIT OpenCourseWareAndre Kessler 6.S096 Lecture 2 16– Subtleties of C. 12 / Images by MIT OpenCourseWare. Sign Fraction (23-bit) = 0.15625 31 23 0 Exponent](https://reader034.fdocuments.net/reader034/viewer/2022042807/5f7daeeb4a328911a824efbf/html5/thumbnails/2.jpg)
Outline
1
2
3
4
Memory Model
Data structures
Floating Point
Wrap-up
Andre Kessler 6.S096 Lecture 2 – Subtleties of C 2 / 16
![Page 3: Lecture 2: Subtleties of C - MIT OpenCourseWareAndre Kessler 6.S096 Lecture 2 16– Subtleties of C. 12 / Images by MIT OpenCourseWare. Sign Fraction (23-bit) = 0.15625 31 23 0 Exponent](https://reader034.fdocuments.net/reader034/viewer/2022042807/5f7daeeb4a328911a824efbf/html5/thumbnails/3.jpg)
Memory Model
Memory model review
Stack memory (local variables, function arguments/calls, return address, etc) Heap memory (malloc)
1
2
Where is each located? Based on architecture.. 1 x86/x86 64: Stack grows down 2 ARM: selectable 3 SPARC: circular stack?!
In general, the stack will be growing down from upper memory addresses while the heap grows up. Stack var: 0x7fffa4c77170 Heap var:: 0x000001ede010
Andre Kessler 6.S096 Lecture 2 – Subtleties of C
1
2
3
1
2
1 2
3
3 /16
![Page 4: Lecture 2: Subtleties of C - MIT OpenCourseWareAndre Kessler 6.S096 Lecture 2 16– Subtleties of C. 12 / Images by MIT OpenCourseWare. Sign Fraction (23-bit) = 0.15625 31 23 0 Exponent](https://reader034.fdocuments.net/reader034/viewer/2022042807/5f7daeeb4a328911a824efbf/html5/thumbnails/4.jpg)
Memory Model
Stack Diagram: (From Stack Overflow - http://goo.gl/t2PQo)
Andre Kessler 6.S096 Lecture 2 – Subtleties of C 4 /16
![Page 5: Lecture 2: Subtleties of C - MIT OpenCourseWareAndre Kessler 6.S096 Lecture 2 16– Subtleties of C. 12 / Images by MIT OpenCourseWare. Sign Fraction (23-bit) = 0.15625 31 23 0 Exponent](https://reader034.fdocuments.net/reader034/viewer/2022042807/5f7daeeb4a328911a824efbf/html5/thumbnails/5.jpg)
Memory Model
malloc and the Heap
Statically allocated int array[10]; int array2[] = { 1, 2, 3, 4, 5 }; char str[] = "Static string";
Dynamically allocated #include <stdlib.h> int *array = malloc( 10 * sizeof( int ) ); // do stuff array[5] = 5; //when done free( array );
Andre Kessler 6.S096 Lecture 2 – Subtleties of C 5 /16
![Page 6: Lecture 2: Subtleties of C - MIT OpenCourseWareAndre Kessler 6.S096 Lecture 2 16– Subtleties of C. 12 / Images by MIT OpenCourseWare. Sign Fraction (23-bit) = 0.15625 31 23 0 Exponent](https://reader034.fdocuments.net/reader034/viewer/2022042807/5f7daeeb4a328911a824efbf/html5/thumbnails/6.jpg)
Memory Model
What’s happening with the file IO?
You’re allocating resources for a file handle (stored in a FILE pointer), which you must then #include <stdio.h>
int main(void) { // open file for writing FILE *output = fopen( "prog.out", "w" ); // do stuff; then close and free resources fclose( output ); return 0;
} Every time you malloc, you must remember to free the memory when you are done! C does not do this for you and it will otherwise result in a resource leak.
Andre Kessler 6.S096 Lecture 2 – Subtleties of C 6 /16
![Page 7: Lecture 2: Subtleties of C - MIT OpenCourseWareAndre Kessler 6.S096 Lecture 2 16– Subtleties of C. 12 / Images by MIT OpenCourseWare. Sign Fraction (23-bit) = 0.15625 31 23 0 Exponent](https://reader034.fdocuments.net/reader034/viewer/2022042807/5f7daeeb4a328911a824efbf/html5/thumbnails/7.jpg)
Memory Model
Let’s go over that again...
“I promise to always free each chunk of memory that I
allocate.”
Don’t be the cause of memory leaks! It’s a bad practice.
Andre Kessler 6.S096 Lecture 2 – Subtleties of C 7 / 16
![Page 8: Lecture 2: Subtleties of C - MIT OpenCourseWareAndre Kessler 6.S096 Lecture 2 16– Subtleties of C. 12 / Images by MIT OpenCourseWare. Sign Fraction (23-bit) = 0.15625 31 23 0 Exponent](https://reader034.fdocuments.net/reader034/viewer/2022042807/5f7daeeb4a328911a824efbf/html5/thumbnails/8.jpg)
Memory Model
Array Indexing: Syntactic sugar
C doesn’t know what an array is, really. T array[] and T *array = malloc(...) are both pointers to contiguous blocks of memory. int array[10]; // Initialize for( int i = 0; i < 10; ++i ) { array[i] = i;
} // Does the exact same thing as above for( int i = 0; i < 10; ++i ) { *( array + i ) = i;
}
Andre Kessler 6.S096 Lecture 2 – Subtleties of C 8 /16
![Page 9: Lecture 2: Subtleties of C - MIT OpenCourseWareAndre Kessler 6.S096 Lecture 2 16– Subtleties of C. 12 / Images by MIT OpenCourseWare. Sign Fraction (23-bit) = 0.15625 31 23 0 Exponent](https://reader034.fdocuments.net/reader034/viewer/2022042807/5f7daeeb4a328911a824efbf/html5/thumbnails/9.jpg)
Data structures
Structs
If C only knows about memory, how do we get it to understand a data structure? struct IntPair_s { int first; int second;
}; // in code: struct IntPair_s pair; pair.first = 1; pair.second = 2; struct IntPair_s *pairPtr = &pair; // use pairPtr->first and pairPtr->second // to access elements
Andre Kessler 6.S096 Lecture 2 – Subtleties of C 9 / 16
![Page 10: Lecture 2: Subtleties of C - MIT OpenCourseWareAndre Kessler 6.S096 Lecture 2 16– Subtleties of C. 12 / Images by MIT OpenCourseWare. Sign Fraction (23-bit) = 0.15625 31 23 0 Exponent](https://reader034.fdocuments.net/reader034/viewer/2022042807/5f7daeeb4a328911a824efbf/html5/thumbnails/10.jpg)
Data structures
Structs and Typedef
If C only knows about memory, how do we get it to understand a data structure? typedef struct IntPair_s { int first; int second;
} IntPair; // in code: IntPair pair; pair.first = 1; pair.second = 2; IntPair *pairPtr = &pair; // use pairPtr->first and pairPtr->second // to access elements
Andre Kessler 6.S096 Lecture 2 – Subtleties of C 10 /16
![Page 11: Lecture 2: Subtleties of C - MIT OpenCourseWareAndre Kessler 6.S096 Lecture 2 16– Subtleties of C. 12 / Images by MIT OpenCourseWare. Sign Fraction (23-bit) = 0.15625 31 23 0 Exponent](https://reader034.fdocuments.net/reader034/viewer/2022042807/5f7daeeb4a328911a824efbf/html5/thumbnails/11.jpg)
Floating Point
Floating Point
Real numbers have to represented in memory in some finite way:
A floating point number float x with sign bit ‘sign’, exponent e, and
mantissa bits m0, m1, . . . , m22 can be written1
x = (−1)sign · (1.m22m21m20 . . . m0) · 2e−bias
where bias is, in our case, 127.
1Unless it’s denormal, which we’ll cover shortly. Andre Kessler 6.S096 Lecture 2 – Subtleties of C 11 /16
![Page 12: Lecture 2: Subtleties of C - MIT OpenCourseWareAndre Kessler 6.S096 Lecture 2 16– Subtleties of C. 12 / Images by MIT OpenCourseWare. Sign Fraction (23-bit) = 0.15625 31 23 0 Exponent](https://reader034.fdocuments.net/reader034/viewer/2022042807/5f7daeeb4a328911a824efbf/html5/thumbnails/12.jpg)
Floating Point
Let’s see some pictures...
float (32 bits)
double (64 bits)
Andre Kessler 6.S096 Lecture 2 – Subtleties of C 12 /16
Images by MIT OpenCourseWare.
Sign Fraction (23-bit)
= 0.15625
23 031
Exponent(8-bit)
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 001 1 1 1 1 1
SignExponent(11-bit) Fraction (52-bit)
52 063
![Page 13: Lecture 2: Subtleties of C - MIT OpenCourseWareAndre Kessler 6.S096 Lecture 2 16– Subtleties of C. 12 / Images by MIT OpenCourseWare. Sign Fraction (23-bit) = 0.15625 31 23 0 Exponent](https://reader034.fdocuments.net/reader034/viewer/2022042807/5f7daeeb4a328911a824efbf/html5/thumbnails/13.jpg)
Floating Point
Subtleties
Rounding and precision
Denormals
Long doubles
Andre Kessler 6.S096 Lecture 2 – Subtleties of C 13 / 16
![Page 14: Lecture 2: Subtleties of C - MIT OpenCourseWareAndre Kessler 6.S096 Lecture 2 16– Subtleties of C. 12 / Images by MIT OpenCourseWare. Sign Fraction (23-bit) = 0.15625 31 23 0 Exponent](https://reader034.fdocuments.net/reader034/viewer/2022042807/5f7daeeb4a328911a824efbf/html5/thumbnails/14.jpg)
Floating Point
Examples
Time for some examples...
Andre Kessler 6.S096 Lecture 2 – Subtleties of C 14 / 16
![Page 15: Lecture 2: Subtleties of C - MIT OpenCourseWareAndre Kessler 6.S096 Lecture 2 16– Subtleties of C. 12 / Images by MIT OpenCourseWare. Sign Fraction (23-bit) = 0.15625 31 23 0 Exponent](https://reader034.fdocuments.net/reader034/viewer/2022042807/5f7daeeb4a328911a824efbf/html5/thumbnails/15.jpg)
Wrap-up
First Assignment
First assignment is posted: four problems total 1000 points floating (300) matrix (200) matrix2 (300) loop (200)
Andre Kessler 6.S096 Lecture 2 – Subtleties of C 15 // 16
![Page 16: Lecture 2: Subtleties of C - MIT OpenCourseWareAndre Kessler 6.S096 Lecture 2 16– Subtleties of C. 12 / Images by MIT OpenCourseWare. Sign Fraction (23-bit) = 0.15625 31 23 0 Exponent](https://reader034.fdocuments.net/reader034/viewer/2022042807/5f7daeeb4a328911a824efbf/html5/thumbnails/16.jpg)
Wrap-up
Wrap-up & Monday
Class on Monday Two shorter guest lectures: Daniel Kang presenting x86 Assembly Lef presenting Secure C
Questions?
Andre Kessler 6.S096 Lecture 2 – Subtleties of C
Ioannidis
16 / 16
is back
![Page 17: Lecture 2: Subtleties of C - MIT OpenCourseWareAndre Kessler 6.S096 Lecture 2 16– Subtleties of C. 12 / Images by MIT OpenCourseWare. Sign Fraction (23-bit) = 0.15625 31 23 0 Exponent](https://reader034.fdocuments.net/reader034/viewer/2022042807/5f7daeeb4a328911a824efbf/html5/thumbnails/17.jpg)
MIT OpenCourseWarehttp://ocw.mit.edu
6.S096 Effective Programming in C and C++IAP 2014
For information about citing these materials or our Terms of Use, visit: http://ocw.mit.edu/terms.