Top Banner
Kymberly Fergusson Kymberly Fergusson CSE1303 Part A CSE1303 Part A Data Structures and Data Structures and Algorithms Algorithms Summer Semester 2003 Summer Semester 2003 Lecture A6 – Dynamic Memory Lecture A6 – Dynamic Memory
40

Kymberly Fergusson CSE1303 Part A Data Structures and Algorithms Summer Semester 2003 Lecture A6 – Dynamic Memory.

Dec 19, 2015

Download

Documents

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Kymberly Fergusson CSE1303 Part A Data Structures and Algorithms Summer Semester 2003 Lecture A6 – Dynamic Memory.

Kymberly FergussonKymberly Fergusson

CSE1303 Part ACSE1303 Part AData Structures and AlgorithmsData Structures and Algorithms

Summer Semester 2003Summer Semester 2003

Lecture A6 – Dynamic MemoryLecture A6 – Dynamic Memory

Page 2: Kymberly Fergusson CSE1303 Part A Data Structures and Algorithms Summer Semester 2003 Lecture A6 – Dynamic Memory.

2

OverviewOverview

• Virtual Memory

• What is Dynamic Memory ?

• How to find the size of objects.

• Allocating memory.

• Deallocating memory.

Page 3: Kymberly Fergusson CSE1303 Part A Data Structures and Algorithms Summer Semester 2003 Lecture A6 – Dynamic Memory.

3

Virtual MemoryVirtual Memory

Text Segment

Data Segment

Stack segment

program instructions

static and dynamic data

local variables, parameters

free memory

Page 4: Kymberly Fergusson CSE1303 Part A Data Structures and Algorithms Summer Semester 2003 Lecture A6 – Dynamic Memory.

4

Virtual MemoryVirtual Memory

Text Segment

Static data

Heap

Stack segment

global variables, etc.

dynamic data

Page 5: Kymberly Fergusson CSE1303 Part A Data Structures and Algorithms Summer Semester 2003 Lecture A6 – Dynamic Memory.

5

Virtual MemoryVirtual Memory

Text Segment

Static data

Heap

Stack segment

memory is allocated and deallocated as needed

Page 6: Kymberly Fergusson CSE1303 Part A Data Structures and Algorithms Summer Semester 2003 Lecture A6 – Dynamic Memory.

6

What is Dynamic Memory?What is Dynamic Memory?

• Memory which is allocated and deallocated during the execution of the program.

• Types:

– data in run-time stack

– dynamic data in the heap

Page 7: Kymberly Fergusson CSE1303 Part A Data Structures and Algorithms Summer Semester 2003 Lecture A6 – Dynamic Memory.

7

Example: Run-Time StackExample: Run-Time Stack

•Memory is allocated when a program calls a function.

– parameters– local variables– where to go upon return

•Memory is deallocated when a program returns from a function.

Page 8: Kymberly Fergusson CSE1303 Part A Data Structures and Algorithms Summer Semester 2003 Lecture A6 – Dynamic Memory.

8

#include <stdio.h>

float square(float x){ float result;

result = x * x; return result;}

main(){ float a = 3.15; float b; b = square(a); printf(“%f\n”, b);}

01:02:03:04:05:06:07:08:09:10:11:12:13:14:15:16:17:18:

stackstack

Page 9: Kymberly Fergusson CSE1303 Part A Data Structures and Algorithms Summer Semester 2003 Lecture A6 – Dynamic Memory.

9

#include <stdio.h>

float square(float x){ float result;

result = x * x; return result;}

main(){ float a = 3.15; float b; b = square(a); printf(“%f\n”, b);}

01:02:03:04:05:06:07:08:09:10:11:12:13:14:15:16:17:18:

stack

3.15a

b

Page 10: Kymberly Fergusson CSE1303 Part A Data Structures and Algorithms Summer Semester 2003 Lecture A6 – Dynamic Memory.

10

#include <stdio.h>

float square(float x){ float result;

result = x * x; return result;}

main(){ float a = 3.15; float b; b = square(a); printf(“%f\n”, b);}

01:02:03:04:05:06:07:08:09:10:11:12:13:14:15:16:17:18:

stack

3.15a

b

3.15x

Page 11: Kymberly Fergusson CSE1303 Part A Data Structures and Algorithms Summer Semester 2003 Lecture A6 – Dynamic Memory.

11

#include <stdio.h>

float square(float x){ float result;

result = x * x; return result;}

main(){ float a = 3.15; float b; b = square(a); printf(“%f\n”, b);}

01:02:03:04:05:06:07:08:09:10:11:12:13:14:15:16:17:18:

stack

3.15a

b

3.15x

line 16

Page 12: Kymberly Fergusson CSE1303 Part A Data Structures and Algorithms Summer Semester 2003 Lecture A6 – Dynamic Memory.

12

#include <stdio.h>

float square(float x){ float result;

result = x * x; return result;}

main(){ float a = 3.15; float b; b = square(a); printf(“%f\n”, b);}

01:02:03:04:05:06:07:08:09:10:11:12:13:14:15:16:17:18:

stack

3.15a

b

3.15x

line 16

result

Page 13: Kymberly Fergusson CSE1303 Part A Data Structures and Algorithms Summer Semester 2003 Lecture A6 – Dynamic Memory.

13

#include <stdio.h>

float square(float x){ float result;

result = x * x; return result;}

main(){ float a = 3.15; float b; b = square(a); printf(“%f\n”, b);}

01:02:03:04:05:06:07:08:09:10:11:12:13:14:15:16:17:18:

stack

3.15a

b

3.15x

line 16

9.9225result

Page 14: Kymberly Fergusson CSE1303 Part A Data Structures and Algorithms Summer Semester 2003 Lecture A6 – Dynamic Memory.

14

#include <stdio.h>

float square(float x){ float result;

result = x * x; return result;}

main(){ float a = 3.15; float b; b = square(a); printf(“%f\n”, b);}

01:02:03:04:05:06:07:08:09:10:11:12:13:14:15:16:17:18:

stack

3.15a

b

3.15x

line 16

9.9225result

Page 15: Kymberly Fergusson CSE1303 Part A Data Structures and Algorithms Summer Semester 2003 Lecture A6 – Dynamic Memory.

15

#include <stdio.h>

float square(float x){ float result;

result = x * x; return result;}

main(){ float a = 3.15; float b; b = square(a); printf(“%f\n”, b);}

01:02:03:04:05:06:07:08:09:10:11:12:13:14:15:16:17:18:

9.9225

stack

3.15a

b

Page 16: Kymberly Fergusson CSE1303 Part A Data Structures and Algorithms Summer Semester 2003 Lecture A6 – Dynamic Memory.

16

#include <stdio.h>

float square(float x){ float result;

result = x * x; return result;}

main(){ float a = 3.15; float b; b = square(a); printf(“%f\n”, b);}

01:02:03:04:05:06:07:08:09:10:11:12:13:14:15:16:17:18:

9.9225

stack

3.15a

b

Page 17: Kymberly Fergusson CSE1303 Part A Data Structures and Algorithms Summer Semester 2003 Lecture A6 – Dynamic Memory.

17

#include <stdio.h>

float square(float x){ float result;

result = x * x; return result;}

main(){ float a = 3.15; float b; b = square(a); printf(“%f\n”, b);}

01:02:03:04:05:06:07:08:09:10:11:12:13:14:15:16:17:18:

stackstack

Page 18: Kymberly Fergusson CSE1303 Part A Data Structures and Algorithms Summer Semester 2003 Lecture A6 – Dynamic Memory.

18

#include <stdlib.h>#include <stdio.h>

int factorial (int x){

if (x == 0){

return 1;}return x * factorial (x –1);

}

void main(){

int n;printf(“Enter a number: \n”);scanf(“%d”, &n);

printf(“Factorial: %d\n”, factorial(n);

}

Page 19: Kymberly Fergusson CSE1303 Part A Data Structures and Algorithms Summer Semester 2003 Lecture A6 – Dynamic Memory.

19

How much memory to allocate?How much memory to allocate?

•The sizeof operator returns the size of an object, or type, in bytes.

•Usage:

sizeof(Type)

sizeof Object

Page 20: Kymberly Fergusson CSE1303 Part A Data Structures and Algorithms Summer Semester 2003 Lecture A6 – Dynamic Memory.

20

Example 1:

int n;char str[25];float x;double numbers[36];

printf(“%d\n”, sizeof(int));printf(“%d\n”, sizeof n);

n = sizeof str;n = sizeof x;n = sizeof(double);n = sizeof numbers;

Page 21: Kymberly Fergusson CSE1303 Part A Data Structures and Algorithms Summer Semester 2003 Lecture A6 – Dynamic Memory.

21

Notes on Notes on sizeofsizeof

•Do not assume the size of an object, or type; use sizeof instead.

•In DOS: 2 bytes (16 bits)•In GCC/Linux: 4 bytes (32 bits)•In MIPS: 4 bytes (32 bits)

Example: int n;

Page 22: Kymberly Fergusson CSE1303 Part A Data Structures and Algorithms Summer Semester 2003 Lecture A6 – Dynamic Memory.

22

#include <stdio.h>

#define MAXNAME 80#define MAXCLASS 100

struct StudentRec{ char name[MAXNAME]; float mark;};

typedef struct StudentRec Student;

Example 2:

Page 23: Kymberly Fergusson CSE1303 Part A Data Structures and Algorithms Summer Semester 2003 Lecture A6 – Dynamic Memory.

23

int main(){ int n; Student class[MAXCLASS];

n = sizeof(int); printf(“Size of int = %d\n”, n); n = sizeof(Student); printf(“Size of Student = %d\n”, n);

n = sizeof class; printf(“Size of array class = %d\n”, n);

return 0;}

Example 2 (cont.):

Page 24: Kymberly Fergusson CSE1303 Part A Data Structures and Algorithms Summer Semester 2003 Lecture A6 – Dynamic Memory.

24

Notes on Notes on sizeof sizeof (cont.)(cont.)•The size of a structure is not necessarily the sum of the sizes of its members.

Example: struct cardRec { char suit; int number;};

typedef struct cardRec Card;

Card hand[5];

printf(“%d\n”, sizeof(Card));printf(“%d\n”, sizeof hand);

“alignment” and “padding”

5*sizeof(Card)

Page 25: Kymberly Fergusson CSE1303 Part A Data Structures and Algorithms Summer Semester 2003 Lecture A6 – Dynamic Memory.

25

Dynamic Memory: HeapDynamic Memory: Heap

•Memory can be allocated for new objects.•Steps:

•determine how many bytes are needed•allocate enough bytes in the heap•take note of where it is (memory address)

Page 26: Kymberly Fergusson CSE1303 Part A Data Structures and Algorithms Summer Semester 2003 Lecture A6 – Dynamic Memory.

26

#include <stdlib.h>

main(){ int* aPtr = NULL; aPtr = (int*)malloc(sizeof(int)); *aPtr = 5;

free(aPtr);}

Example 1:

NULL

stack

aPtr

heap

Page 27: Kymberly Fergusson CSE1303 Part A Data Structures and Algorithms Summer Semester 2003 Lecture A6 – Dynamic Memory.

27

#include <stdlib.h>

main(){ int* aPtr = NULL; aPtr = (int*)malloc(sizeof(int)); *aPtr = 5;

free(aPtr);}

heap

0x3a04

NULL

stack

aPtr 0x3a04

Example 1:

Page 28: Kymberly Fergusson CSE1303 Part A Data Structures and Algorithms Summer Semester 2003 Lecture A6 – Dynamic Memory.

28

#include <stdlib.h>

main(){ int* aPtr = NULL; aPtr = (int*)malloc(sizeof(int)); *aPtr = 5;

free(aPtr);}

heap

0x3a04

NULL

stack

aPtr 0x3a04

“type cast”

Example 1:

Page 29: Kymberly Fergusson CSE1303 Part A Data Structures and Algorithms Summer Semester 2003 Lecture A6 – Dynamic Memory.

29

#include <stdlib.h>

main(){ int* aPtr = NULL; aPtr = (int*)malloc(sizeof(int)); *aPtr = 5;

free(aPtr);}

5

heap

0x3a04

stack

aPtr 0x3a04

Example 1:

Page 30: Kymberly Fergusson CSE1303 Part A Data Structures and Algorithms Summer Semester 2003 Lecture A6 – Dynamic Memory.

30

#include <stdlib.h>

main(){ int* aPtr = NULL; aPtr = (int*)malloc(sizeof(int)); *aPtr = 5;

free(aPtr);}

0x3a04

stack

aPtr

Example 1:

heap

Page 31: Kymberly Fergusson CSE1303 Part A Data Structures and Algorithms Summer Semester 2003 Lecture A6 – Dynamic Memory.

31

#include <stdlib.h>

main(){ int* aPtr = NULL; aPtr = (int*)malloc(sizeof(int)); *aPtr = 5;

free(aPtr);}

0x3a04

stack

aPtr

Example 1:

deallocates memory

heap

Page 32: Kymberly Fergusson CSE1303 Part A Data Structures and Algorithms Summer Semester 2003 Lecture A6 – Dynamic Memory.

32

#include <stdlib.h>

main(){ int* aPtr; int* bPtr;

aPtr = (int*)malloc(sizeof(int)); *aPtr = 5;

bPtr = (int*)malloc(sizeof(int)); *bPtr = 8;

free(aPtr);

aPtr = bPtr; bPtr = (int*)malloc(sizeof(int)); *bPtr = 6;}

Example 2:

Page 33: Kymberly Fergusson CSE1303 Part A Data Structures and Algorithms Summer Semester 2003 Lecture A6 – Dynamic Memory.

33

Allocating MemoryAllocating Memory

• NeedNeed to include stdlib.h• malloc(n) returns a pointer to n bytes of

memory.

• AlwaysAlways check if malloc has returned the NULL pointer.

• ApplyApply a type cast to the pointer returned by malloc.

Page 34: Kymberly Fergusson CSE1303 Part A Data Structures and Algorithms Summer Semester 2003 Lecture A6 – Dynamic Memory.

34

Deallocating MemoryDeallocating Memory

• free(pointer) deallocates the memory pointed to by a pointer.

• It does nothing if pointer == NULL.• pointer must point to memory previously

allocated by malloc.• ShouldShould free memory no longer being used.

Page 35: Kymberly Fergusson CSE1303 Part A Data Structures and Algorithms Summer Semester 2003 Lecture A6 – Dynamic Memory.

35

main(){ Student* studentPtr = NULL;

studentPtr = (Student*)malloc(sizeof(Student));

if (studentPtr == NULL) { fprintf(stderr, “Out of memory\n”); exit(1); }

*studentPtr = readStudent(); printStudent(*studentPtr);

free(studentPtr);}

Example 3:

Page 36: Kymberly Fergusson CSE1303 Part A Data Structures and Algorithms Summer Semester 2003 Lecture A6 – Dynamic Memory.

36

main(){ Student* class = NULL; int n, i, best = 0;

printf(“Enter number of Students: ”); scanf(“%d”, &n);

class = (Student*)malloc(n * sizeof(Student)); if (class != NULL) { for (i = 0; i < n; i++) { class[i] = readStudent(); if (class[best].mark < class[i].mark) { best = i; } } printf(“Best student: ”); printStudent(class[best]); }}

Example 4:

Page 37: Kymberly Fergusson CSE1303 Part A Data Structures and Algorithms Summer Semester 2003 Lecture A6 – Dynamic Memory.

37

Common ErrorsCommon Errors

• Assuming that the size of a structure is the sum of the sizes of its members.

• Referring to memory already freed.

• Not freeing memory which is no longer required.

• Freeing memory not allocated by malloc.

Page 38: Kymberly Fergusson CSE1303 Part A Data Structures and Algorithms Summer Semester 2003 Lecture A6 – Dynamic Memory.

38

#include <stdio.h>#include <stdlib.h>

float** makeMatrix(int n, int m){ float* memoryPtr; float** matrixPtr; int i;

memoryPtr = (float*)malloc(n*m*sizeof(float)); matrixPtr = (float**)malloc(n*sizeof(float*)); if (memoryPtr == NULL || matrixPtr == NULL) { fprintf(stderr, “Not enough memory\n”); exit(1); } for (i = 0; i < n; i++, memoryPtr += m){ matrixPtr[i] = memoryPtr; } return matrixPtr;}

Example 5:

Page 39: Kymberly Fergusson CSE1303 Part A Data Structures and Algorithms Summer Semester 2003 Lecture A6 – Dynamic Memory.

39

RevisionRevision

• sizeof

• malloc

• free

• Common errors.

PreparationPreparation

• Read Kruse et al. Chapter 4, Section 4.5

Page 40: Kymberly Fergusson CSE1303 Part A Data Structures and Algorithms Summer Semester 2003 Lecture A6 – Dynamic Memory.

40

Revision: ReadingRevision: Reading• Kruse 4.5

• Deitel and Deitel 12.3

• Standish 8.6

• King 17

PreparationPreparationNext lecture: Nodes and Linked Structures

• Read Kruse et al. Chapter 4, Section 4.5