Memory Management in C Memory Management in C Personal Software - - PowerPoint PPT Presentation

memory management in c memory management in c
SMART_READER_LITE
LIVE PREVIEW

Memory Management in C Memory Management in C Personal Software - - PowerPoint PPT Presentation

Memory Management in C Memory Management in C Personal Software Engineering Personal Software Engineering Memory Organization Memory Organization The call stack grows from the The call stack grows from the Function Call The top of


slide-1
SLIDE 1

Personal Software Engineering Personal Software Engineering

Memory Management in C Memory Management in C

slide-2
SLIDE 2

Memory Organization Memory Organization

 The call stack grows from the

The call stack grows from the top of memory down top of memory down

 Code is at the bottom of

Code is at the bottom of memory. memory.

 Global data follows the code.

Global data follows the code.

 What's left

What's left – the "heap" the "heap" - is is available for allocation. available for allocation.

Binary Code Global Variables Function Call Frames

sp Available for allocation The Stack The Heap

slide-3
SLIDE 3

Allocating Memory Allocating Memory

void *malloc( unsigned nbytes ) ; void *malloc( unsigned nbytes ) ;

– Allocates 'nbytes' of memory in the heap. Allocates 'nbytes' of memory in the heap. – Guaranteed not to overlap other allocated memory. Guaranteed not to overlap other allocated memory. – Returns pointer to the first byte (or NULL if the heap is full). Returns pointer to the first byte (or NULL if the heap is full). – Similar to constructor in Java Similar to constructor in Java – allocates space. allocates space. – Space allocated uninitialized (random garbage). Space allocated uninitialized (random garbage).

void free( void *ptr ) ; void free( void *ptr ) ;

– Frees the memory assigned to ptr. Frees the memory assigned to ptr. – The space must have been allocated by malloc. The space must have been allocated by malloc. – No garbage collection in C (or C++). No garbage collection in C (or C++). – Can slowly consume memory if not careful Can slowly consume memory if not careful

slide-4
SLIDE 4

How Much Space Is Needed? How Much Space Is Needed? - 1 1

sizeof sizeof (type type) ) –

– gives the size of a type in bytes. gives the size of a type in bytes.

Allocation Examples Allocation Examples

int int *ip ip ;

???? ip

slide-5
SLIDE 5

How Much Space Is Needed? How Much Space Is Needed? - 1 1

sizeof sizeof (type type) ) –

– gives the size of a type in bytes. gives the size of a type in bytes.

Allocation Examples Allocation Examples

int int *ip ip ; ip ip = = (int int *) *) malloc malloc( ( sizeof sizeof(int int) ) ) ) ;

ip ???? ???? ip

slide-6
SLIDE 6

How Much Space Is Needed? How Much Space Is Needed? - 1 1

sizeof sizeof (type type) ) –

– gives the size of a type in bytes. gives the size of a type in bytes.

Allocation Examples Allocation Examples

int int *ip ip ; ip ip = = (int int *) *) malloc malloc( ( sizeof sizeof(int int) ) ) ) ; *ip ip = 1234 ; = 1234 ;

ip ???? ???? ip ip 1234

slide-7
SLIDE 7

How Much Space Is Needed? How Much Space Is Needed? - 1 1

sizeof sizeof (type type) ) –

– gives the size of a type in bytes. gives the size of a type in bytes.

Allocation Examples Allocation Examples

int int *ip ip ; ip ip = = (int int *) *) malloc malloc( ( sizeof sizeof(int int) ) ) ) ; *ip ip = 1234 ; = 1234 ; ip ip = ( = (int int *) *)malloc malloc( ( sizeof sizeof(int int) ) ; ) ) ;

ip ???? ???? ip ip 1234 1234 ???? ip

slide-8
SLIDE 8

How Much Space Is Needed? How Much Space Is Needed? - 1 1

sizeof sizeof (type type) ) –

– gives the size of a type in bytes. gives the size of a type in bytes.

Allocation Examples Allocation Examples

int int *ip ip ; ip ip = = (int int *) *) malloc malloc( ( sizeof sizeof(int int) ) ) ) ; *ip ip = 1234 ; = 1234 ; ip ip = ( = (int int *) *)malloc malloc( ( sizeof sizeof(int int) ) ; ) ) ;

ip ???? ???? ip ip 1234 1234 ????

  • rphan

storage ip

slide-9
SLIDE 9

How Much Space Is Needed? How Much Space Is Needed? - 1 1

sizeof sizeof (type type) ) –

– gives the size of a type in bytes. gives the size of a type in bytes.

Allocation Examples Allocation Examples

int int *ip ip ; ip ip = = (int int *) *) malloc malloc( ( sizeof sizeof(int int) ) ) ) ; *ip ip = 1234 ; = 1234 ; free( free(ip ip) ; ) ;

ip ???? ???? ip ip 1234 ???? ip 1234

slide-10
SLIDE 10

How Much Space Is Needed? How Much Space Is Needed? - 1 1

sizeof sizeof (type type) ) –

– gives the size of a type in bytes. gives the size of a type in bytes.

Allocation Examples Allocation Examples

int int *ip ip ; ip ip = = (int int *) *) malloc malloc( ( sizeof sizeof(int int) ) ) ) ; *ip ip = 1234 ; = 1234 ; free( free(ip ip) ; ) ; ip ip = ( = (int int *) *)malloc malloc( ( sizeof sizeof(int int) ) ; ) ) ;

ip ???? ???? ip ip 1234 ???? ip ???? 1234 ip

slide-11
SLIDE 11

How Much Space Is Needed? How Much Space Is Needed? - 2 2

char * char *make_copy make_copy( char * ( char *orig

  • rig ) {

) { char *copy = (char *) char *copy = (char *) malloc malloc( ( sizeof sizeof(char) * (char) * strlen strlen(orig

  • rig) + 1 ) ;

) + 1 ) ; (void) (void) strcpy strcpy( copy, ( copy, orig

  • rig ) ;

) ; return copy ; return copy ; } char ** char **create_string_vector create_string_vector( ( int int nstrings nstrings ) { ) { char ** char **str_vector str_vector ; str_vector str_vector = (char **) = (char **) malloc malloc( ( nstrings nstrings * * sizeof sizeof(char *) ) ; (char *) ) ; return return str_vector str_vector ; }

'J' 'o' 'e' '\0'

char orig[4] ;

'J' 'o' 'e' '\0'

char *copy str_vector str_vector nstrings nstrings

slide-12
SLIDE 12

Linked Lists Linked Lists

  Structures with values and link (pointer) to next

Structures with values and link (pointer) to next – and and possibly previous possibly previous - structure. structure.

  Example: List of strings:

Example: List of strings:

typedef struct node { char *string ; struct node *next ; } node ; node *top ;

top string next string next string next "New Years" "Labor Day" "4th of July"