Memory Allocation CS 217.

Slides:



Advertisements
Similar presentations
Dynamic Memory Allocation in C.  What is Memory What is Memory  Memory Allocation in C Memory Allocation in C  Difference b\w static memory allocation.
Advertisements

Algorithms and data structures
Dynamic Memory Management
Carnegie Mellon 1 Dynamic Memory Allocation: Basic Concepts : Introduction to Computer Systems 17 th Lecture, Oct. 21, 2010 Instructors: Randy Bryant.
Chris Riesbeck, Fall 2007 Dynamic Memory Allocation Today Dynamic memory allocation – mechanisms & policies Memory bugs.
Lecture 10: Heap Management CS 540 GMU Spring 2009.
Various languages….  Could affect performance  Could affect reliability  Could affect language choice.
ECE Application Programming Instructor: Dr. Michael Geiger Fall 2012 Lecture 31: Dynamic memory allocation.
CSCI 171 Presentation 11 Pointers. Pointer Basics.
1 Memory Allocation Professor Jennifer Rexford COS 217.
User-Level Memory Management in Linux Programming
Agenda  Review: pointer & array  Relationship between pointer & array  Dynamic memory allocation.
Pointer applications. Arrays and pointers Name of an array is a pointer constant to the first element whose value cannot be changed Address and name refer.
CP104 Introduction to Programming Structure II Lecture 32 __ 1 Data Type planet_t and Basic Operations Abstract Data Type (ADT) is a data type combined.
Memory allocation CSE 2451 Matt Boggus. sizeof The sizeof unary operator will return the number of bytes reserved for a variable or data type. Determine:
1 Day 03 Introduction to C. 2 Memory layout and addresses r s int x = 5, y = 10; float f = 12.5, g = 9.8; char c = ‘r’, d = ‘s’;
Processes CSCI 444/544 Operating Systems Fall 2008.
1 1 Lecture 4 Structure – Array, Records and Alignment Memory- How to allocate memory to speed up operation Structure – Array, Records and Alignment Memory-
Memory Arrangement Memory is arrange in a sequence of addressable units (usually bytes) –sizeof( ) return the number of units it takes to store a type.
C and Data Structures Baojian Hua
Run-time Environment and Program Organization
1 Inner Workings of Malloc and Free Professor Jennifer Rexford COS 217.
1 CSE 303 Lecture 11 Heap memory allocation ( malloc, free ) reading: Programming in C Ch. 11, 17 slides created by Marty Stepp
Memory Layout C and Data Structures Baojian Hua
1 Dynamic Memory Management. 2 What’s worse?  50% of instructions/data are cache misses (fetched from RAM)  1% of instructions/data are page faults.
Security Exploiting Overflows. Introduction r See the following link for more info: operating-systems-and-applications-in-
CS 11 C track: lecture 5 Last week: pointers This week: Pointer arithmetic Arrays and pointers Dynamic memory allocation The stack and the heap.
Outline Midterm results Static variables Memory model
Lecture 13 Static vs Dynamic Memory Allocation
Stack and Heap Memory Stack resident variables include:
Dynamic Memory Allocation The process of allocating memory at run time is known as dynamic memory allocation. C does not Inherently have this facility,
Topic 2d High-Level languages and Systems Software
University of Washington Today Finished up virtual memory On to memory allocation Lab 3 grades up HW 4 up later today. Lab 5 out (this afternoon): time.
1 Dynamic Memory Allocation –The need –malloc/free –Memory Leaks –Dangling Pointers and Garbage Collection Today’s Material.
Dynamic Memory Allocation. Domain A subset of the total domain name space. A domain represents a level of the hierarchy in the Domain Name Space, and.
Prachi A. Joshi Assistant Professor in CSE DIEMS,Aurangabad Unit 1 : Basic Concepts Pointers and dynamic memory allocation, Algorithm Specification, Data.
ECE Application Programming
Computer Organization and Design Pointers, Arrays and Strings in C Montek Singh Sep 18, 2015 Lab 5 supplement.
© Janice Regan, CMPT 128, February CMPT 128: Introduction to Computing Science for Engineering Students Pointers.
1 Lecture07: Memory Model 5/2/2012 Slides modified from Yin Lou, Cornell CS2022: Introduction to C.
1 Dynamic Memory Allocation. 2 In everything we have done so far, our variables have been declared at compile time. In these slides, we will see how to.
Dynamic Memory Management Jennifer Rexford 1. 2 Goals of this Lecture Dynamic memory management techniques Garbage collection by the run-time system (Java)
Variables Bryce Boe 2012/09/05 CS32, Summer 2012 B.
CSE 220 – C Programming malloc, calloc, realloc.
Object Lifetime and Pointers
Stack and Heap Memory Stack resident variables include:
Processes and threads.
Advanced Programming with C
Day 03 Introduction to C.
Dynamic Memory Allocation
Run-time organization
Day 03 Introduction to C.
Checking Memory Management
CSCI206 - Computer Organization & Programming
The Hardware/Software Interface CSE351 Winter 2013
Dynamic Memory Allocation
Programming and Data Structures
CSC215 Lecture Memory Management.
Dynamic Memory Allocation
EECE.2160 ECE Application Programming
Dynamic Memory Allocation (and Multi-Dimensional Arrays)
CS111 Computer Programming
EENG212 – Algorithms & Data Structures Fall 07/08 – Lecture Notes # 5b
EECE.2160 ECE Application Programming
EECE.2160 ECE Application Programming
RUN-TIME STORAGE Chuen-Liang Chen Department of Computer Science
Dynamic Memory – A Review
EECE.2160 ECE Application Programming
Module 13 Dynamic Memory.
CSE 303 Concepts and Tools for Software Development
Presentation transcript:

Memory Allocation CS 217

Goals for Today’s Lecture Behind the scenes of running a program Code, executable, and process Main memory vs. virtual memory Memory layout for UNIX processes, and relationship to C Text: code and constant data Data: initialized global and static variables BSS: uninitialized global and static variables Heap: dynamic memory Stack: local variables C functions for memory management malloc: allocate memory from the heap free: deallocate memory from the heap

Code vs. Executable vs. Process C source code C statements organized into functions Stored as a collection of files (.c and .h) Executable module Binary image generated by compiler Stored as a file (e.g., a.out) Process Instance of a program that is executing With its own address space in memory With its own id and execution state Managed by the operating system executable C source code process compiling running

Main Memory on a Computer What is main memory? Storage for variables, data, code, etc. May be shared among many processes Network Audio CPU Data Bus Disk Video Memory

Virtual Memory for a Process What is virtual memory? Contiguous addressable memory space for a single process May be swapped into physical memory from disk in pages Let’s you pretend each process has its own contiguous memory Network Audio Virtual Address Space CPU Data Bus 32 32 Disk Video Memory 0xffffffff

What to Store: Code and Constants Executable code and constant data Program binary, and any shared libraries it loads Necessary for OS to read the commands OS knows everything in advance Knows amount of space needed Knows the contents of the memory Known as the “text” segment Text 0xffffffff

What to Store: “Static” Data Variables that exist for the entire program Global variables, and “static” local variables Amount of space required is known in advance Data: initialized in the code Initial value specified by the programmer E.g., “int x = 97;” Memory is initialized with this value BSS: not initialized in the code Initial value not specified E.g., “int x;” All memory initialized to 0 BSS stands for “Block Started by Symbol” An old archaic term (not important) Text Data BSS 0xffffffff

What to Store: Dynamic Memory Memory allocated while program is running E.g., allocated using the malloc() function And deallocated using the free() function OS knows nothing in advance Doesn’t know the amount of space Doesn’t know the contents So, need to allow room to grow Known as the “heap” Detailed example in a few slides More in programming assignment #4 Text Data BSS Heap 0xffffffff

What to Store: Temporary Variables Temporary memory during lifetime of a function or block Storage for function parameters and local variables Current line number of the function Need to support nested function calls One function calls another, and so on Store the variables of calling function Know where to return when done So, must allow room to grow Known as the “stack” Push on the stack as new function is called Pop off the stack as the function ends Detailed example later on Text Data BSS Heap Stack 0xffffffff

Memory Layout: Summary Text: code, constant data Data: initialized global & static variables BSS: uninitialized global & static variables Heap: dynamic memory Stack: local variables Text Data BSS Heap Stack 0xffffffff

Memory Layout Example char* string = “hello”; int iSize; char* f(void) { char* p; iSize = 8; p = malloc(iSize); return p; } Text Data BSS Heap Stack

Memory Layout Example: Text char* string = “hello”; int iSize; char* f(void) { char* p; iSize = 8; p = malloc(iSize); return p; } Text Data BSS Heap Stack

Memory Layout Example: Data char* string = “hello”; int iSize; char* f(void) { char* p; iSize = 8; p = malloc(iSize); return p; } Text Data BSS Heap Stack

Memory Layout Example: BSS char* string = “hello”; int iSize; char* f(void) { char* p; iSize = 8; p = malloc(iSize); return p; } Text Data BSS Heap Stack

Memory Layout Example: Heap char* string = “hello”; int iSize; char* f(void) { char* p; iSize = 8; p = malloc(iSize); return p; } Text Data BSS Heap Stack

Memory Layout Example: Stack char* string = “hello”; int iSize; char* f(void) { char* p; iSize = 8; p = malloc(iSize); return p; } Text Data BSS Heap Stack

Memory Allocation & Deallocation How, and when, is memory allocated? Global and static variables = program startup Local variables = function call Dynamic memory = malloc() How is memory deallocated? Global and static variables = program finish Local variables = function return Dynamic memory = free() All memory deallocated when program ends It is good style to free allocated memory anyway Text Data BSS Heap Stack

Memory Allocation Example char* string = “hello”; int iSize; char* f(void) { char* p; iSize = 8; p = malloc(iSize); return p; } Data: “hello” at startup BSS: 0 at startup Stack: at function call Heap: 8 bytes at malloc

Memory Deallocation Example Available till termination char* string = “hello”; int iSize; char* f(void) { char* p; iSize = 8; p = malloc(iSize); return p; } Available till termination Deallocate on return from f Deallocate on free()

Memory Initialization Local variables have undefined values int count; Memory allocated by malloc() has undefined values char* p = (char *) malloc(8); If you need a variable to start with a particular value, use an explicit initializer int count = 0; p[0] = ’\0’; Global and static variables are initialized to 0 by default static int count = 0; is the same as static int count; It is bad style to depend on this

Heap: Dynamic Memory #include <stdlib.h> void *malloc(size_t size); void free(void *ptr); Text Heap p1 char *p1 = malloc(3); char *p2 = malloc(1); char *p3 = malloc(4); free(p2); char *p4 = malloc(6); free(p3); char *p5 = malloc(2); free(p1); free(p4); free(p5); Data } BSS Heap Stack 0xffffffff

Heap: Dynamic Memory #include <stdlib.h> void *malloc(size_t size); void free(void *ptr); Text Heap p1 char *p1 = malloc(3); char *p2 = malloc(1); char *p3 = malloc(4); free(p2); char *p4 = malloc(6); free(p3); char *p5 = malloc(2); free(p1); free(p4); free(p5); Data p2 } BSS Heap Stack 0xffffffff

Heap: Dynamic Memory #include <stdlib.h> void *malloc(size_t size); void free(void *ptr); Text Heap p1 char *p1 = malloc(3); char *p2 = malloc(1); char *p3 = malloc(4); free(p2); char *p4 = malloc(6); free(p3); char *p5 = malloc(2); free(p1); free(p4); free(p5); Data p2 } BSS p3 Heap Stack 0xffffffff

Heap: Dynamic Memory #include <stdlib.h> void *malloc(size_t size); void free(void *ptr); Text Heap p1 char *p1 = malloc(3); char *p2 = malloc(1); char *p3 = malloc(4); free(p2); char *p4 = malloc(6); free(p3); char *p5 = malloc(2); free(p1); free(p4); free(p5); Data p2 } BSS p3 Heap Stack 0xffffffff

Heap: Dynamic Memory #include <stdlib.h> void *malloc(size_t size); void free(void *ptr); Text Heap p1 char *p1 = malloc(3); char *p2 = malloc(1); char *p3 = malloc(4); free(p2); char *p4 = malloc(6); free(p3); char *p5 = malloc(2); free(p1); free(p4); free(p5); Data p2 } BSS p3 Heap p4 Stack 0xffffffff

Heap: Dynamic Memory #include <stdlib.h> void *malloc(size_t size); void free(void *ptr); Text Heap p1 char *p1 = malloc(3); char *p2 = malloc(1); char *p3 = malloc(4); free(p2); char *p4 = malloc(6); free(p3); char *p5 = malloc(2); free(p1); free(p4); free(p5); Data p2 } BSS p3 Heap p4 Stack 0xffffffff

Heap: Dynamic Memory #include <stdlib.h> void *malloc(size_t size); void free(void *ptr); Text Heap p1 char *p1 = malloc(3); char *p2 = malloc(1); char *p3 = malloc(4); free(p2); char *p4 = malloc(6); free(p3); char *p5 = malloc(2); free(p1); free(p4); free(p5); Data p5, p2 } BSS p3 Heap p4 Stack 0xffffffff

Heap: Dynamic Memory #include <stdlib.h> void *malloc(size_t size); void free(void *ptr); Text Heap p1 char *p1 = malloc(3); char *p2 = malloc(1); char *p3 = malloc(4); free(p2); char *p4 = malloc(6); free(p3); char *p5 = malloc(2); free(p1); free(p4); free(p5); Data p5, p2 } BSS p3 Heap p4 Stack 0xffffffff

Heap: Dynamic Memory #include <stdlib.h> void *malloc(size_t size); void free(void *ptr); Text Heap p1 char *p1 = malloc(3); char *p2 = malloc(1); char *p3 = malloc(4); free(p2); char *p4 = malloc(6); free(p3); char *p5 = malloc(2); free(p1); free(p4); free(p5); Data p5, p2 } BSS p3 Heap p4 Stack 0xffffffff

Heap: Dynamic Memory #include <stdlib.h> void *malloc(size_t size); void free(void *ptr); Text Heap p1 char *p1 = malloc(3); char *p2 = malloc(1); char *p3 = malloc(4); free(p2); char *p4 = malloc(6); free(p3); char *p5 = malloc(2); free(p1); free(p4); free(p5); Data p5, p2 } BSS p3 Heap p4 Stack 0xffffffff

How Do Malloc and Free Work? Simple answer Doesn’t matter Good modularity means you can use it without understanding it Real answer malloc(s) n = s / sizeof(int) free(p) put p into linked list of free objects 1 word of overhead n n n words of user data

Using Malloc and Free Types void* malloc(size_t size) void*: generic pointer to any type (can be converted to other types) size_t: unsigned integer type returned by sizeof() void* malloc(size_t size) Returns a pointer to space of size size … or NULL if the request cannot be satisfied E.g., int* x = (int *) malloc(sizeof(int)); void* calloc(size_t nobj, size_t size) Returns a pointer to space for array of nobj objects of size size Bytes are initialized to 0 void free(void* p) Deallocate the space pointed to by the pointer p Pointer p must be pointer to space previously allocated Do nothing if p is NULL

Avoid Dangling Pointers Dangling pointers point to data that’s not there anymore int f(void) { char* p; p = (char *) malloc(8 * sizeof(char)); … return 0; } int main() { f();

Summary Five types of memory for variables Text: code, constant data Data: initialized global & static variables BSS: uninitialized global & static variables Heap: dynamic memory Stack: local variables Important to understand differences between Allocation: space allocated Initialization: initial value, if any Deallocation: space reclaimed Understanding memory allocation is important Make efficient use of memory Avoid “memory leaks” from dangling pointers