Last lecture - summary

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

description

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. - PowerPoint PPT Presentation

Transcript of Last lecture - summary

Page 1: Last lecture - summary

2

Last lecture - summary

Unix environment Data types in C C – simple programs C Arrays – A Glance Makefiles Java vs. C

Abed Asi - ESPL

Page 2: Last lecture - summary

3

Today

Memory Arrangement Structs & Arrays Pointers Memory Management in C Memory layout in Unix

Abed Asi - ESPL

Page 3: Last lecture - summary

4

Definitions Bit – a binary digit – zero or one

Byte – 8 bits

Abed Asi - ESPL

Page 4: Last lecture - summary

5

Big-Little-endian

Abed Asi - ESPL

Big-endian MSB 0A

Little-endian LSB 0D

Page 5: Last lecture - summary

6

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

Page 6: Last lecture - summary

7

Memory Arrangement

Abed Asi - ESPL

int main(){

char c; int i,j; double x; …

Page 7: Last lecture - summary

8

Array

Abed Asi - ESPL

Defines a block of consecutive cells

int main(){ int i; int a[4]; …

Page 8: Last lecture - summary

9

Arrays - the [ ] operator

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

int arr[5] = {1, 5, 2, 1 ,3}; /*arr begins at address 40*/

1 5 2 1 340 44 48 52 56 60

Page 9: Last lecture - summary

10

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…

Abed Asi - ESPL

int a[4];a[-1] = 0; a[4] = 0;

Page 10: Last lecture - summary

11

Structs

In C, we can define new types These types are a composite of other

types – structures origin of classes!

Abed Asi - ESPL

struct Complex {double _real;double _imag;

{;

struct Complex c;c._real = 1;c._imag = 0;

sizeof(struct Complex)? =

Page 11: Last lecture - summary

12

Structs

Contiguously-allocated region of memory

Refer to members within structure by names

Members may be of different types

Abed Asi - ESPL

struct rec { int i; int a[3]; int *p;};

Page 12: Last lecture - summary

13

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

Page 13: Last lecture - summary

14

Pointers

Abed Asi - ESPL

int main(){ int i,j; int *x; // x points to an integer i = 1; x = &i; j = *x; x = &j; (*x) = 3;}

i j x1

Page 14: Last lecture - summary

15

Pointers

Abed Asi - ESPL

int main(){ int i,j; int *x; // x points to an integer i = 1; x = &i; j = *x; x = &j; (*x) = 3;}

i j x1

0x01000x0100

Page 15: Last lecture - summary

16

Pointers

Abed Asi - ESPL

int main(){ int i,j; int *x; // x points to an integer i = 1; x = &i; j = *x; x = &j; (*x) = 3;}

i j x1

0x01000x01001

Page 16: Last lecture - summary

17

Pointers

Abed Asi - ESPL

int main(){ int i,j; int *x; // x points to an integer i = 1; x = &i; j = *x; x = &j; (*x) = 3;}

i j x1

0x01000x01041

Page 17: Last lecture - summary

18

Pointers

Abed Asi - ESPL

int main(){ int i,j; int *x; // x points to an integer i = 1; x = &i; j = *x; x = &j; (*x) = 3;}

i j x1

0x01000x01043

Page 18: Last lecture - summary

19

Pointers – the swap function

Abed Asi - ESPL

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….

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…

Does nothing Works

Page 19: Last lecture - summary

Pointer Arithmetic

int a[4]; int *p = a; char *q = (char *)a; // Explicit cast // p and q point to the same location

Abed Asi - ESPL20

a[1] a[2] a[3]a[0]

q p

Arrays are essentially constant pointers

p++; // increment p by 1 int (4 bytes)q++; // increment q by 1 char (1 byte)

Page 20: Last lecture - summary

21

Pointers and Arrays

Abed Asi - ESPL

illegalillegal

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++;

Page 21: Last lecture - summary

22

Pointers and Arrays

Abed Asi - ESPL

int *p;int a[4];

sizeof (p) = sizeof (void*) = ?sizeof (a) = ?

Page 22: Last lecture - summary

23

Pointers and Arrays

Abed Asi - ESPL

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

Page 23: Last lecture - summary

24

Pointers to pointers

(1) int i=3;(2) int j=4;(3) int k=5;

3i: 4j: 5k:

ip1: ip2:

ipp:

(4) int *ip1 = &i;

(5) int *ip2 = &j;

(6) int **ipp = &ip1;

Page 24: Last lecture - summary

25

Pointers to pointers

(1) int i=3;(2) int j=4;(3) int k=5;

3i: 4j: 5k:

ip1: ip2:

ipp:

(4) int *ip1 = &i;

(5) int *ip2 = &j;

(6) int **ipp = &ip1;(7) ipp = &ip2;

Page 25: Last lecture - summary

26

Pointers to pointers

(1) int i=3;(2) int j=4;(3) int k=5;

3i: 4j: 5k:

ip1: ip2:

ipp:

(4) int *ip1 = &i;

(5) int *ip2 = &j;

(6) int **ipp = &ip1;(7) ipp = &ip2;

(8) *ipp = &k;

Page 26: Last lecture - summary

27

Memory Management During run time, variables can be stored in one of three

“pools”

Stack Static heap Dynamic heap

Abed Asi - ESPL

Page 27: Last lecture - summary

28

Memory layout in Unix

Abed Asi - ESPL

program code

Stack

Dynamic heap

Static heap

Each program has its own logical memory

OS maps logical memory to physical memory

A program logical memory is not visible to other programs

Page 28: Last lecture - summary

29

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

Page 29: Last lecture - summary

30

Stack - example

Abed Asi - ESPL

int foo( int a, double f ){ int b;

…}

afb

<call>

Page 30: Last lecture - summary

31

Stack - example

Abed Asi - ESPL

int foo( int a, double f ){ int b; … { int c; … }…}

afb

<call>

Page 31: Last lecture - summary

32

Stack - example

Abed Asi - ESPL

int foo( int a, double f ){ int b; … { int c; … }…}

afbc

<call>

Page 32: Last lecture - summary

33

Stack - example

Abed Asi - ESPL

int foo( int a, double f ){ int b; … { int c; … } …}

afbc

<call>

Page 33: Last lecture - summary

34

Stack - example

Abed Asi - ESPL

int foo( int a, double f ) { int b; … { int c; … } … }

afbc

<call>

Page 34: Last lecture - summary

35

Stack

Abed Asi - ESPL

How the stack looks like when a recursive function is invoked ?

what about infinite loops ?

Page 35: Last lecture - summary

36

Static heap

Abed Asi - ESPL

Memory for global variables (initialized? , unitialized?)

Static variables are defined throughout the execution of the program

int add2(int a, int b) { int c = 0; static int total = 0;   c = a+b; total+= c; return c; }

Page 36: Last lecture - summary

37

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

Page 37: Last lecture - summary

38

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

Page 38: Last lecture - summary

39

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));

Page 39: Last lecture - summary

40

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 malloc or was

free-ed before, undefined behavior

Page 40: Last lecture - summary

41

Further knowledge

Read manual page of malloc calloc realloc free

Page 41: Last lecture - summary

42

Memory layout in Unix

Abed Asi - ESPL

program code

Stack

Dynamic heap

Static heap

Each program has its own logical memory

OS maps logical memory to physical memory

A program logical memory is not visible to other programs

Page 42: Last lecture - summary

43

Memory layout in Unix#include <stdio.h>#include <stdlib.h>

int global_variable;

int main(int argc, char **argv) {int local_variable;static int static_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;}

Abed Asi - ESPL

addresses of:function main: 0x080483f4global variable: 0x0804a018local variable: 0xbf806598static variable: 0x0804a024dynamic memory: 0x08c19008