Compiler Construction

Similar documents
Compiler Construction

Run-time Environments -Part 3

Run-Time Environments/Garbage Collection

G Programming Languages - Fall 2012

Garbage Collection Algorithms. Ganesh Bikshandi

Garbage Collection. Akim D le, Etienne Renault, Roland Levillain. May 15, CCMP2 Garbage Collection May 15, / 35

Runtime. The optimized program is ready to run What sorts of facilities are available at runtime

Programming Languages Third Edition. Chapter 10 Control II Procedures and Environments

CS 330 Lecture 18. Symbol table. C scope rules. Declarations. Chapter 5 Louden Outline

Garbage Collection (1)

Run-time Environments - 3

Storage. Outline. Variables and updating. Copy vs. Ref semantics Lifetime. Dangling References Garbage collection

Lecture 15 Garbage Collection

Compilers. 8. Run-time Support. Laszlo Böszörmenyi Compilers Run-time - 1

Lecture 13: Garbage Collection

Heap, Variables, References, and Garbage. CS152. Chris Pollett. Oct. 13, 2008.

CMSC 330: Organization of Programming Languages

CMSC 330: Organization of Programming Languages

Name, Scope, and Binding. Outline [1]

Garbage Collection. Weiyuan Li

CS61C : Machine Structures

CSE 307: Principles of Programming Languages

CS 480 Fall Runtime Environments. Mike Lam, Professor. (a.k.a. procedure calls and heap management)

CS 345. Garbage Collection. Vitaly Shmatikov. slide 1

CMSC 330: Organization of Programming Languages. Memory Management and Garbage Collection

Lecture Notes on Garbage Collection

Example. program sort; var a : array[0..10] of integer; procedure readarray; : function partition (y, z :integer) :integer; var i, j,x, v :integer; :

Lecture 13: Complex Types and Garbage Collection

Programming Languages Third Edition. Chapter 7 Basic Semantics

Programming Language Implementation

NOTE: Answer ANY FOUR of the following 6 sections:

6.172 Performance Engineering of Software Systems Spring Lecture 9. P after. Figure 1: A diagram of the stack (Image by MIT OpenCourseWare.

Chapter 5. Names, Bindings, and Scopes

Automatic Memory Management

Data Types. Outline. In Text: Chapter 6. What is a type? Primitives Strings Ordinals Arrays Records Sets Pointers 5-1. Chapter 6: Data Types 2

One-Slide Summary. Lecture Outine. Automatic Memory Management #1. Why Automatic Memory Management? Garbage Collection.

Memory Management. Memory Management... Memory Management... Interface to Dynamic allocation

Storage. Outline. Variables and Updating. Composite Variables. Storables Lifetime : Programming Languages. Course slides - Storage

Sustainable Memory Use Allocation & (Implicit) Deallocation (mostly in Java)

Attributes, Bindings, and Semantic Functions Declarations, Blocks, Scope, and the Symbol Table Name Resolution and Overloading Allocation, Lifetimes,

Project. there are a couple of 3 person teams. a new drop with new type checking is coming. regroup or see me or forever hold your peace

Garbage Collection Techniques

CS577 Modern Language Processors. Spring 2018 Lecture Garbage Collection

CS 430 Spring Mike Lam, Professor. Data Types and Type Checking

Motivation for Dynamic Memory. Dynamic Memory Allocation. Stack Organization. Stack Discussion. Questions answered in this lecture:

Data Types In Text: Ch C apter 6 1

CS 536 Introduction to Programming Languages and Compilers Charles N. Fischer Lecture 11

Names, Bindings, Scopes

Compiler Construction

CS 241 Honors Memory

Run-time Environments

Run-time Environments

Memory Allocation. Static Allocation. Dynamic Allocation. Dynamic Storage Allocation. CS 414: Operating Systems Spring 2008

Programmin Languages/Variables and Storage

Manual Allocation. CS 1622: Garbage Collection. Example 1. Memory Leaks. Example 3. Example 2 11/26/2012. Jonathan Misurda

Dynamic Memory Allocation

Concepts Introduced in Chapter 7

Garbage Collection. Steven R. Bagley

Garbage Collection. Lecture Compilers SS Dr.-Ing. Ina Schaefer. Software Technology Group TU Kaiserslautern. Ina Schaefer Garbage Collection 1

Garbage Collection. Hwansoo Han

6. Names, Scopes, and Bindings

Principles of Programming Languages Topic: Scope and Memory Professor Louis Steinberg Fall 2004

CS61C : Machine Structures

Fifth Generation CS 4100 LISP. What do we need? Example LISP Program 11/13/13. Chapter 9: List Processing: LISP. Central Idea: Function Application

Heap Management. Heap Allocation

A.Arpaci-Dusseau. Mapping from logical address space to physical address space. CS 537:Operating Systems lecture12.fm.2

Types II. Hwansoo Han

Lecture Notes on Garbage Collection

Dynamic Memory Management! Goals of this Lecture!

Compiler Construction D7011E

Design Issues. Subroutines and Control Abstraction. Subroutines and Control Abstraction. CSC 4101: Programming Languages 1. Textbook, Chapter 8

Programming Languages

Introduction Primitive Data Types Character String Types User-Defined Ordinal Types Array Types. Record Types. Pointer and Reference Types

Memory Management. Chapter Fourteen Modern Programming Languages, 2nd ed. 1

Compiler Construction

Dynamic Storage Allocation

Memory Allocation II. CSE 351 Autumn Instructor: Justin Hsia

High-Level Language VMs

ACM Trivia Bowl. Thursday April 3 rd (two days from now) 7pm OLS 001 Snacks and drinks provided All are welcome! I will be there.

Dynamic Memory Management

Exploiting the Behavior of Generational Garbage Collector

Implementation Garbage Collection

CS321 Languages and Compiler Design I Winter 2012 Lecture 13

G Programming Languages - Fall 2012

Advances in Programming Languages: Regions

Compiler Construction

Class Information ANNOUCEMENTS

CS558 Programming Languages

Lecture 14. No in-class files today. Homework 7 (due on Wednesday) and Project 3 (due in 10 days) posted. Questions?

CS558 Programming Languages

CS61C : Machine Structures

CS558 Programming Languages

CS61C : Machine Structures

UNIT-V. Symbol Table & Run-Time Environments Symbol Table

Chapter 5 Names, Binding, Type Checking and Scopes

Dynamic Memory Allocation II October 22, 2008

CSE 504: Compilers. Expressions. R. Sekar

Structure of Programming Languages Lecture 10

Qualifying Exam in Programming Languages and Compilers

Performance of Non-Moving Garbage Collectors. Hans-J. Boehm HP Labs

Transcription:

Compiler Construction Lecture 18: Code Generation V (Implementation of Dynamic Data Structures) Thomas Noll Lehrstuhl für Informatik 2 (Software Modeling and Verification) noll@cs.rwth-aachen.de http://moves.rwth-aachen.de/teaching/ss-14/cc14/ Summer Semester 2014

Outline 1 Pseudo-Dynamic Data Structures 2 Heap Management 3 Memory Deallocation 4 Garbage Collection 5 Reference-Counting Garbage Collection 6 Mark-and-Sweep Garbage Collection Compiler Construction Summer Semester 2014 18.2

Variant Records Example 18.1 (Variant records in Pascal) TYPE Coordinate = RECORD nr: INTEGER; CASE type: (cartesian, polar) OF cartesian: (x, y: REAL); polar: (r : REAL; phi: INTEGER ) END END; VAR pt: Coordinate; pt.type := cartesian; pt.x := 0.5; pt.y := 1.2; Implementation: Allocate memory for biggest variant Share memory between variant fields Compiler Construction Summer Semester 2014 18.3

Dynamic Arrays Example 18.2 (Dynamic arrays in Pascal) FUNCTION Sum(VAR a: ARRAY OF REAL): REAL; VAR i: INTEGER; s: REAL; BEGIN s := 0.0; FOR i := 0 to HIGH(a) do s := s + a[i] END; Sum := s END Implementation: Memory requirements unknown at compile time but determined by actual function/procedure parameters = no heap required Use array descriptor with following fields as parameter value: starting memory address of array size of array lower index of array (possibly fixed by 0) upper index of array (actually redundant) Use data stack or index register to access array elements Compiler Construction Summer Semester 2014 18.4

Outline 1 Pseudo-Dynamic Data Structures 2 Heap Management 3 Memory Deallocation 4 Garbage Collection 5 Reference-Counting Garbage Collection 6 Mark-and-Sweep Garbage Collection Compiler Construction Summer Semester 2014 18.5

Dynamic Memory Allocation I Dynamically manipulated data structures (lists, trees, graphs,...) So far: creation of (static) objects by declaration Now: creation of (dynamic) objects by explicit memory allocation Access by (implicit or explicit) pointers Deletion by explicit deallocation or garbage collection (= automatic deallocation of unreachable objects) Implementation: runtime stack not sufficient (lifetime of objects generally exceeds lifetime of procedure calls) = new data structure: heap Simplest form of organization: Runtime stack Heap 0 SP (stack pointer) HP max (heap pointer) Compiler Construction Summer Semester 2014 18.6

Dynamic Memory Allocation II New instruction: NEW ( malloc,...) allocates n memory cells where n = topmost value of runtime stack returns address of first cell formal semantics (SP = stack pointer, HP = heap pointer, <.> = dereferencing): if HP - <SP> > SP then HP := HP - <SP>; <SP> := HP else error("memory overflow") But: collision check required for every operation which increases SP (e.g., expression evaluations) Efficient solution: add extreme stack pointer EP points to topmost SP which will be used in the computation of current procedure statically computable at compile time set by procedure entry code modified semantics of NEW: if HP - <SP> > EP then HP := HP - <SP>; <SP> := HP else error("memory overflow") Compiler Construction Summer Semester 2014 18.7

Outline 1 Pseudo-Dynamic Data Structures 2 Heap Management 3 Memory Deallocation 4 Garbage Collection 5 Reference-Counting Garbage Collection 6 Mark-and-Sweep Garbage Collection Compiler Construction Summer Semester 2014 18.8

Memory Deallocation Releasing memory areas that have become unused explicitly by programmer automatically by runtime system (garbage collection) Management of deallocated memory areas by free list (usually doubly-linked list) goal: reduction of fragmentation (= heap memory splitted in large number of non-contiguous free areas) coalescing of contiguous areas allocation strategies: first-fit vs. best-fit Compiler Construction Summer Semester 2014 18.9

Explicit Deallocation Manually releasing memory areas that have become unused Pascal: dispose C: free Problems with manual deallocation: memory leaks: failing to eventually delete data that cannot be referenced anymore critical for long-running/reactive programs (operating systems, server code,...) dangling pointer dereference: referencing of deleted data may lead to runtime error (if deallocated pointer reset to nil) or produce side effects (if deallocated pointer keeps value and storage reallocated) = Adopt programming conventions (object ownership) or use automatic deallocation Compiler Construction Summer Semester 2014 18.10

Outline 1 Pseudo-Dynamic Data Structures 2 Heap Management 3 Memory Deallocation 4 Garbage Collection 5 Reference-Counting Garbage Collection 6 Mark-and-Sweep Garbage Collection Compiler Construction Summer Semester 2014 18.11

Garbage Collection Garbage = data that cannot be referenced (anymore) Garbage collection = automatic deallocation of unreachable data Supported by many programming languages: object-oriented: Java, Smalltalk functional: Lisp (first GC), ML, Haskell logic: Prolog scripting: Perl Design goals for garbage collectors: execution time: no significant increase of application run time space usage: avoid memory fragmentation pause time: minimize maximal pause time of application program caused by garbage collection (especially in real-time applications) Compiler Construction Summer Semester 2014 18.12

Preliminaries Object = allocated entity Object has type known at runtime, defining size of object references to other objects = excludes type-unsafe languages that allow manipulation of pointers (C, C++) Reference always to address at beginning of object ( = all references to an object have same value) Mutator = application program modifying objects in heap creation of objects by acquiring storage introduce/drop references to existing objects Objects become garbage when not (indirectly) reachable by mutator Compiler Construction Summer Semester 2014 18.13

Reachability of Objects Root set = heap data that is directly accessible by mutator for Java: static field members and variables on stack yields directly reachable objects Every object with a reference that is stored in a reachable object is indirectly reachable Mutator operations that affect reachability: object allocation: memory manager returns reference to new object creates new reachable object parameter passing and return values: passing of object references from calling site to called procedure or vice versa propagates reachability of objects reference assignment: assignments p := q with references p and q creates second reference to object referred to by q, propagating reachability destroys orginal reference in p, potentially causing unreachability procedure return: removes local variables potentially causes unreachability of objects Objects becoming unreachable can cause more objects to become unreachable Compiler Construction Summer Semester 2014 18.14

Identifying Unreachable Objects Principal approaches: Catch program steps that turn reachable into unreachable objects = reference counting Periodically locate all reachable objects; others then unreachable = mark-and-sweep Compiler Construction Summer Semester 2014 18.15

Outline 1 Pseudo-Dynamic Data Structures 2 Heap Management 3 Memory Deallocation 4 Garbage Collection 5 Reference-Counting Garbage Collection 6 Mark-and-Sweep Garbage Collection Compiler Construction Summer Semester 2014 18.16

Reference-Counting Garbage Collectors I Working principle: Add reference count field to each heap object (= number of references to that object) Mutator operations maintain reference count: object allocation: set reference count of new object to 1 parameter passing: increment reference count of each object passed to procedure reference assignment p := q: decrement/increment reference count of object referred to by p/q, respectively procedure return: decrement reference count of each object that a local variable refers to (multiple decrement if sharing) Moreover: transitive loss of reachability when reference count of object becomes zero = decrement reference count of each object pointed to (and add object storage to free list) Example 18.3 (on the board) Compiler Construction Summer Semester 2014 18.17

Reference Counting Garbage Collectors II Advantage: Incrementality collector operations spread over mutator s computation short pause times (good for real-time/interactive applications) immediate collection of garbage (low space usage) exception: transitive loss of reachability (removing a reference may render many objects unreachable) but: recursive modification can be deferred Disadvantages: Incompleteness: cannot collect unreachable, cyclic data structures (cf. Example 18.3) High overhead: additional operations for assignments and procedure calls/exits proportional to number of mutator steps (and not to number of heap objects) Conclusion: use for real-time/interactive applications Compiler Construction Summer Semester 2014 18.18

Outline 1 Pseudo-Dynamic Data Structures 2 Heap Management 3 Memory Deallocation 4 Garbage Collection 5 Reference-Counting Garbage Collection 6 Mark-and-Sweep Garbage Collection Compiler Construction Summer Semester 2014 18.19

Mark-and-Sweep Garbage Collectors I Working principle: Mutator runs and makes allocation requests Collector runs periodically (typically when space exhausted/below critical threshold) computes set of reachable objects reclaims storage for objects in complement set Compiler Construction Summer Semester 2014 18.20

Mark-and-Sweep Garbage Collectors II Algorithm 18.4 (Mark-and-sweep garbage collection) Input: heap Heap, root set Root, free list Free Procedure: 1 (* Marking phase *) for each o in Heap, (* initialize reachability bit *) let r o := true iff o referenced by Root 2 let W := {o r o = true} (* working set *) 3 while o W do 1 let W := W \{o} 2 for each o referenced by o with r o = false, let r o = true;w := W {o } 4 (* Sweeping phase *) for each o in Heap with r o = false, add o to Free Output: modified free list Example 18.5 (on the board) Compiler Construction Summer Semester 2014 18.21

Mark-and-Sweep Garbage Collectors III Advantages: Completeness: identifies all unreachable objects Time complexity proportional to number of objects in heap Disadvantage: stop-the-world style = may introduce long pauses into mutator execution (sweeping phase inspects complete heap) Conclusion: refine to short-pause garbage collection Incremental collection: divide work in time by interleaving mutation and collection Partial collection: divide work in space by collecting subset of garbage at a time (see Chapter 7 of A.V. Aho, M.S. Lam, R. Sethi, J.D. Ullman: Compilers Principles, Techniques, and Tools; 2nd ed., Addison-Wesley, 2007) Compiler Construction Summer Semester 2014 18.22