Unformatted text preview:

inst eecs berkeley edu cs61c CS61C Machine Structures Lecture 5 C Memory Management 2004 09 10 Lecturer PSOE Dan Garcia www cs berkeley edu ddgarcia Barry Bonds nears 700 We are witness to perhaps the greatest baseball player of all time and he plays weekly 10 miles from here Years from now you ll know where you were when he passed 755 CS 61C L04 C Structures Memory Management 1 Garcia Fall 2004 UCB More from Wednesday s lecture 1 define macros may go anywhere Thereafter the name is replaced with the replacement text It is usually good style to put all defines at the top so that reordering code doesn t cause bugs 2 void pointers used to be char pointers before ANSI C Therefore partially to maintain compatibility incrementing a void pointer via increments it by 1 byte 3 const type qualifier announces objects are not to be changed Implementationdependent storage and violation penalty CS 61C L04 C Structures Memory Management 2 Garcia Fall 2004 UCB C String Standard Functions int strlen char string compute the length of string int strcmp char str1 char str2 return 0 if str1 and str2 are identical how is this different from str1 str2 int strcpy char dst char src copy the contents of string src to the memory at dst The caller must ensure that dst has enough memory to hold the data to be copied CS 61C L04 C Structures Memory Management 3 Garcia Fall 2004 UCB Pointers to pointers 1 4 review Sometimes you want to have a procedure increment a variable What gets printed void AddOne int x x x 1 y 5 int y 5 AddOne y printf y d n y CS 61C L04 C Structures Memory Management 4 Garcia Fall 2004 UCB Pointers to pointers 2 4 review Solved by passing in a pointer to our subroutine Now what gets printed void AddOne int p p p 1 y 6 int y 5 AddOne y printf y d n y CS 61C L04 C Structures Memory Management 5 Garcia Fall 2004 UCB Pointers to pointers 3 4 But what if what you want changed is a pointer What gets printed void IncrementPtr int p p 1 p int A 3 50 60 70 int q A IncrementPtr q printf q d n q CS 61C L04 C Structures Memory Management 6 q 50 Aq 50 60 70 Garcia Fall 2004 UCB Pointers to pointers 4 4 Solution Pass a pointer to a pointer called a handle declared as h Now what gets printed void IncrementPtr int h q 60 h h 1 q Aq int A 3 50 60 70 int q A IncrementPtr q printf q d n q CS 61C L04 C Structures Memory Management 7 50 60 70 Garcia Fall 2004 UCB Administrivia One extra credit lab checkoff pt Sign up to get your lab checked off by the first hour and you will get 1 bonus checkoff point to count toward final grade Not 1 300 1 out of 4 for that lab CS 61C L04 C Structures Memory Management 8 Garcia Fall 2004 UCB Dynamic Memory Allocation 1 3 C has operator sizeof which gives size in bytes of type or variable Assume size of objects can be misleading is bad style so use sizeof type Many years ago an int was 16 bits and programs assumed it was 2 bytes CS 61C L04 C Structures Memory Management 9 Garcia Fall 2004 UCB Dynamic Memory Allocation 2 3 To allocate room for something new to point to use malloc with the help of a typecast and sizeof ptr int malloc sizeof int Now ptr points to a space somewhere in memory of size sizeof int in bytes int simply tells the compiler what will go into that space called a typecast malloc is almost never used for 1 var ptr int malloc n sizeof int This allocates an array of n integers CS 61C L04 C Structures Memory Management 10 Garcia Fall 2004 UCB Dynamic Memory Allocation 3 3 Once malloc is called the memory location contains garbage so don t use it until you ve set its value After dynamically allocating space we must dynamically free it free ptr Use this command to clean up CS 61C L04 C Structures Memory Management 11 Garcia Fall 2004 UCB Binky Pointer Video thanks to NP SU QuickTime and a Cinepak decompressor are needed to see this picture CS 61C L04 C Structures Memory Management 12 Garcia Fall 2004 UCB C structures Overview A struct is a data structure composed for simpler data types Like a class in Java C but without methods or inheritance struct point int x int y void PrintPoint point p printf d d p x p y CS 61C L04 C Structures Memory Management 13 Garcia Fall 2004 UCB C structures Pointers to them The C arrow operator dereferences and extracts a structure field with a single operator The following are equivalent struct point p printf x is d n p x printf x is d n p x CS 61C L04 C Structures Memory Management 14 Garcia Fall 2004 UCB How big are structs Recall C operator sizeof which gives size in bytes of type or variable How big is sizeof p struct p char x int y 5 bytes 8 bytes Compiler may word align integer y CS 61C L04 C Structures Memory Management 15 Garcia Fall 2004 UCB Peer Instruction Which are guaranteed to print out 5 I main int a ptr a ptr 5 printf d a ptr II main int p a 5 p a code a p NEVER on LHS of 1 printf d a 2 3 III main 4 int ptr 5 ptr int malloc sizeof int 6 ptr 5 7 printf d ptr 8 CS 61C L04 C Structures Memory Management 16 I YES YES YES YES II III YES YES YES YES YES YES YES YES Garcia Fall 2004 UCB Linked List Example Let s look at an example of using structures pointers malloc and free to implement a linked list of strings struct Node char value struct Node next typedef Node List Create a new empty list List ListNew void return NULL CS 61C L04 C Structures Memory Management 17 Garcia Fall 2004 UCB Linked List Example add a string to an existing list List list add List list char string struct Node node struct Node malloc sizeof struct Node node value char malloc strlen string 1 strcpy node value string node next list return node list node NULL string abc CS 61C L04 C Structures Memory Management 18 Garcia Fall 2004 UCB Linked List Example add a string to an existing list List list add List list char string struct Node node struct Node malloc sizeof struct Node node value char malloc strlen string 1 strcpy node value string node next list return node list node NULL string abc CS 61C L04 C Structures Memory Management 19 Garcia Fall 2004 UCB Linked List Example add a string to an existing list List list add List list char string struct Node node struct Node malloc sizeof struct …


View Full Document

Berkeley COMPSCI 61C - Lecture 5 – C Memory Management

Documents in this Course
SIMD II

SIMD II

8 pages

Midterm

Midterm

7 pages

Lecture 7

Lecture 7

31 pages

Caches

Caches

7 pages

Lecture 9

Lecture 9

24 pages

Lecture 1

Lecture 1

28 pages

Lecture 2

Lecture 2

25 pages

VM II

VM II

4 pages

Midterm

Midterm

10 pages

Load more
Loading Unlocking...
Login

Join to view Lecture 5 – C Memory Management and access 3M+ class-specific study document.

or
We will never post anything without your permission.
Don't have an account?
Sign Up

Join to view Lecture 5 – C Memory Management and access 3M+ class-specific study document.

or

By creating an account you agree to our Privacy Policy and Terms Of Use

Already a member?