1 / 42

Last lecture - summary

Last lecture - summary. Unix environment Data types in C C – simple programs C Arrays – A Glance Makefiles Java vs. C. Today. Memory Arrangement Structs & Arrays Pointers Memory Management in C Memory layout in Unix. Definitions . Bit – a binary digit – zero or one Byte – 8 bits.

malaya
Download Presentation

Last lecture - summary

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Last lecture - summary • Unix environment • Data types in C • C – simple programs • C Arrays – A Glance • Makefiles • Java vs. C Abed Asi - ESPL

  2. Today • Memory Arrangement • Structs & Arrays • Pointers • Memory Management in C • Memory layout in Unix Abed Asi - ESPL

  3. Definitions • Bit – a binary digit – zero or one • Byte – 8 bits Abed Asi - ESPL

  4. Big-Little-endian • Big-endian • MSB  0A • Little-endian • LSB  0D Abed Asi - ESPL

  5. Memory Arrangement • Memory is arranged in a sequence of addressable units (usually bytes) • sizeof( <type> ) returns the number of units it takes to store a type. • sizeof(char) = 1 • sizeof(int) = 4 (on most of our machines) Abed Asi - ESPL

  6. Memory Arrangement int main(){ char c; inti,j; double x; … Abed Asi - ESPL

  7. Array Defines a block of consecutive cells intmain() { inti; int a[4]; … Abed Asi - ESPL

  8. 40 44 48 52 56 60 1 5 2 1 3 Arrays - the [ ] operator intarr[5] = {1, 5, 2, 1 ,3}; /*arr begins at address 40*/ • Address Computation Examples arr[0] 40+0*sizeof(int) = 40 arr[3] 40+3*sizeof(int) = 52 arr[i] 40+i*sizeof(int) = 40 + 4*i arr[-1] 40+(-1)*sizeof (int) = 36 // can be the code segment or other variables Abed Asi - ESPL

  9. Arrays • C does not provide any run time checks • This will compile and run (no errors) • But can lead to unpredictable results • It is the programmer’s responsibility to check whether the index is out of bounds… int a[4]; a[-1] = 0; a[4] = 0; Abed Asi - ESPL

  10. Structs • In C, we can define new types • These types are a composite of other types – structures • origin of classes! struct Complex { double _real; double _imag; {; structComplex c; c._real = 1; c._imag = 0; • sizeof(struct Complex) = ? Abed Asi - ESPL

  11. Structs • Contiguously-allocated region of memory • Refer to members within structure by names • Members may be of different types struct rec { inti; int a[3]; int *p; }; Abed Asi - ESPL

  12. Pointers • Declaration <type> *p; p points to objects of type <type> • Pointer  value *p = x; y = *p; *p refers to the object p points to • value  pointer &x - the pointer to x Abed Asi - ESPL

  13. Pointers int main() { inti,j; int *x; // x points to an integer i = 1; x = &i; j = *x; x = &j; (*x) = 3; } i j x 1 Abed Asi - ESPL

  14. Pointers int main() { inti,j; int *x; // x points to an integer i = 1; x = &i; j = *x; x = &j; (*x) = 3; } i j x 1 0x0100 0x0100 Abed Asi - ESPL

  15. Pointers int main() { inti,j; int *x; // x points to an integer i = 1; x = &i; j = *x; x = &j; (*x) = 3; } i j x 1 1 0x0100 0x0100 Abed Asi - ESPL

  16. Pointers int main() { inti,j; int *x; // x points to an integer i = 1; x = &i; j = *x; x = &j; (*x) = 3; } i j x 1 1 0x0104 0x0100 Abed Asi - ESPL

  17. Pointers int main() { inti,j; int *x; // x points to an integer i = 1; x = &i; j = *x; x = &j; (*x) = 3; } i j x 1 3 0x0104 0x0100 Abed Asi - ESPL

  18. Pointers – the swap function Does nothing Works void swap(int *pa, int *pb) { int temp = *pa; *pa = *pb; *pb = temp; } …. int main() { int x, y; x = 3; y = 7; swap(&x, &y); // x == 7, y == 3 … void swap(int a, int b) { int temp = a; a = b; b = temp; } …. int main() { int x, y; x = 3; y = 7; swap(x, y); // now x==3, y==7 …. Abed Asi - ESPL

  19. Pointer Arithmetic int a[4]; int *p = a; char *q = (char *)a; // Explicit cast // p and q point to the same location Arrays are essentially constant pointers p++; // increment p by 1 int (4 bytes) q++; // increment q by 1 char (1 byte) a[0] a[1] a[2] a[3] p q Abed Asi - ESPL

  20. Pointers and Arrays Arrays are essentially constant pointers int *p; int a[4]; p = a; // same as p = &a[0] p[1] = 102; // same as *(p+1)=102; *(a+1) = 102; // same p++; // p == a+1 == &a[1] a = p; a++; illegal illegal Abed Asi - ESPL

  21. Pointers and Arrays int*p; int a[4]; sizeof (p) = sizeof (void*) = ? sizeof (a) = ? Abed Asi - ESPL

  22. Pointers and Arrays int foo( int *p ); and int foo( int a[] ); • Declaring the same interface • In both cases, a pointer to int is being passed to the function foo Abed Asi - ESPL

  23. j: i: k: 4 3 5 ip1: ip2: Pointers to pointers (1) inti=3; (2) int j=4; (3) int k=5; (4) int *ip1 = &i; (5) int *ip2 = &j; (6) int **ipp = &ip1; ipp:

  24. j: i: k: 4 3 5 ip1: ip2: Pointers to pointers (1) inti=3; (2) int j=4; (3) int k=5; (4) int *ip1 = &i; (5) int *ip2 = &j; (6) int **ipp = &ip1; (7) ipp = &ip2; ipp:

  25. j: i: k: 4 3 5 Pointers to pointers (1) inti=3; (2) int j=4; (3) int k=5; (4) int *ip1 = &i; (5) int *ip2 = &j; ip1: ip2: (6) int **ipp = &ip1; (7) ipp = &ip2; ipp: (8) *ipp = &k;

  26. Memory Management • During run time, variables can be stored in one of three “pools” • Stack • Static heap • Dynamic heap Abed Asi - ESPL

  27. Memory layout in Unix • Each program has its own logical memory • OS maps logical memory to physical memory • A program logical memory is not visible to other programs Stack Dynamic heap Static heap program code Abed Asi - ESPL

  28. Stack • Maintains memory during function calls • Argument of the function • Local variables • Call Frame • Variables on the stack have limited “life time” Abed Asi - ESPL

  29. Stack - example int foo( int a, double f ) { int b; … } <call> a f b Abed Asi - ESPL

  30. Stack - example int foo( int a, double f ) { int b; … { int c; … } … } <call> a f b Abed Asi - ESPL

  31. Stack - example int foo( int a, double f ) { int b; … { int c; … } … } <call> a f b c Abed Asi - ESPL

  32. Stack - example int foo( int a, double f ) { int b; … { int c; … } … } <call> a f b c Abed Asi - ESPL

  33. Stack - example int foo( int a, double f ) { int b; … { int c; … } … } <call> a f b c Abed Asi - ESPL

  34. Stack • How the stack looks like when a recursive function is invoked ? • what about infinite loops ? Abed Asi - ESPL

  35. Static heap • Memory for global variables (initialized? , unitialized?) • Static variables are defined throughout the execution of the program int add2(int a, int b) { intc = 0; staticint total = 0;   c = a+b; total+= c; return c; } Abed Asi - ESPL

  36. Dynamic heap • Memory that can be allocated and freed by the program during run time • The program controls how much is allocated and when • Limitations based on run-time situation • Available memory on the computer Abed Asi - ESPL

  37. Dynamic heap void *malloc( size_t Size ); • Returns a pointer to a new memory block of size Size bytes • Returns NULL if it cannot allocate memory of this size Abed Asi - ESPL

  38. How we use it? void *malloc( size_t Size ); int* iptr= (int*) malloc(sizeof(int)); struct Complex* complex_ptr = (struct Complex*)malloc(sizeof(struct Complex));

  39. De-allocating memory void free( void *p ); • Returns the memory block pointed by p to the pool of unused memory • No error checking! • If p was not allocated by mallocor was free-edbefore, undefined behavior

  40. Further knowledge Read manual page of • malloc • calloc • realloc • free

  41. Memory layout in Unix • Each program has its own logical memory • OS maps logical memory to physical memory • A program logical memory is not visible to other programs Stack Dynamic heap Static heap program code Abed Asi - ESPL

  42. Memory layout in Unix #include <stdio.h>#include <stdlib.h>intglobal_variable;int main(intargc, char **argv) {intlocal_variable;static intstatic_variable;int *dynamic_variable = (int*)malloc(sizeof(int));printf("addresses of:\n""\tfunction main: 0x%08lx\n""\tglobal variable: 0x%08lx\n""\tlocal variable: 0x%08lx\n""\tstatic variable: 0x%08lx\n""\tdynamic memory: 0x%08lx\n",(unsigned long)main,(unsigned long)&global_variable,(unsigned long)&local_variable,(unsigned long)&static_variable,(unsigned long)dynamic_variable);return 0;} addresses of:function main: 0x080483f4global variable: 0x0804a018local variable: 0xbf806598static variable: 0x0804a024dynamic memory: 0x08c19008 Abed Asi - ESPL

More Related