Object Lifetime and Pointers

Slides:



Advertisements
Similar presentations
Chapter 6 Data Types
Advertisements

Names and Bindings.
Various languages….  Could affect performance  Could affect reliability  Could affect language choice.
CS 326 Programming Languages, Concepts and Implementation Instructor: Mircea Nicolescu Lecture 18.
Chapter 8 Runtime Support. How program structures are implemented in a computer memory? The evolution of programming language design has led to the creation.
Memory Management. History Run-time management of dynamic memory is a necessary activity for modern programming languages Lisp of the 1960’s was one of.
CS 355 – Programming Languages
1 Pointers A pointer variable holds an address We may add or subtract an integer to get a different address. Adding an integer k to a pointer p with base.
CS 330 Programming Languages 10 / 16 / 2008 Instructor: Michael Eckmann.
Lifetime “The lifetime of a variable is the time during which the variable is bound to a specific memory location.” [p. 219] “…the lifetime of a variable.
CS 330 Programming Languages 10 / 18 / 2007 Instructor: Michael Eckmann.
ISBN Chapter 5 Names, Bindings, Type Checking, and Scopes Names Variables The Concept of Binding Type Checking Strong Typing Type Compatibility.
The Concept of Variables
CS 330 Programming Languages 10 / 24 / 2006 Instructor: Michael Eckmann.
Names and Bindings Introduction Names Variables The concept of binding Chapter 5-a.
1 Contents. 2 Run-Time Storage Organization 3 Static Allocation In many early languages, notably assembly and FORTRAN, all storage allocation is static.
Names, Bindings, and Scopes
Software II: Principles of Programming Languages Lecture 5 – Names, Bindings, and Scopes.
1 Chapter 5: Names, Bindings and Scopes Lionel Williams Jr. and Victoria Yan CSci 210, Advanced Software Paradigms September 26, 2010.
Prof. amr Goneid, AUC1 CSCE 110 PROGRAMMING FUNDAMENTALS WITH C++ Prof. Amr Goneid AUC Part 10. Pointers & Dynamic Data Structures.
Names and Binding In procedural programming, you write instructions the manipulate the “state” of the process where the “state” is the collection of variables.
5-1 Chapter 5: Names, Bindings, Type Checking, and Scopes Variables The Concept of Binding Type Checking Strong Typing Type Compatibility Scope and Lifetime.
March 12, ICE 1341 – Programming Languages (Lecture #6) In-Young Ko Programming Languages (ICE 1341) Lecture #6 Programming Languages (ICE 1341)
Chapter 5 Names, Bindings, and Scopes. Copyright © 2012 Addison-Wesley. All rights reserved.1-2 Chapter 5 Topics Introduction Names Variables The Concept.
ISBN Chapter 5 Names, Bindings, and Scopes.
Introduction A variable can be characterized by a collection of properties, or attributes, the most important of which is type, a fundamental concept in.
Basic Semantics Associating meaning with language entities.
ISBN Chapter 5 Names, Bindings, and Scopes.
CSC3315 (Spring 2008)1 CSC 3315 Subprograms Hamid Harroud School of Science and Engineering, Akhawayn University
1 Records Record aggregate of data elements –Possibly heterogeneous –Elements/slots are identified by names –Elements in same fixed order in all records.
CPSC 252 Dynamic Memory Allocation Page 1 Dynamic memory allocation Our first IntVector class has some serious limitations the capacity is fixed at MAX_SIZE.
1 CS Programming Languages Class 09 September 21, 2000.
ISBN Chapter 6 Data Types Pointer Types Reference Types Memory Management.
Names, Bindings, and Scope Session 3 Course : T Programming Language Concept Year : February 2011.
Concepts of programming languages Chapter 5 Names, Bindings, and Scopes Lec. 12 Lecturer: Dr. Emad Nabil 1-1.
How to execute Program structure Variables name, keywords, binding, scope, lifetime Data types – type system – primitives, strings, arrays, hashes – pointers/references.
ISBN Chapter 5 Names, Bindings, Type Checking, and Scopes.
1 Structure of Compilers Lexical Analyzer (scanner) Modified Source Program Parser Tokens Semantic Analysis Syntactic Structure Optimizer Code Generator.
CS 330 Programming Languages 10 / 23 / 2007 Instructor: Michael Eckmann.
ISBN Chapter 5 Names, Bindings, Type Checking, and Scopes.
Data Types Chapter 6: Data Types Lectures # 13. Topics Chapter 6: Data Types 2 Introduction Primitive Data Types Character String Types Array Types Associative.
Chapter 5 Names, Bindings, Type Checking CSCE 343.
5.2 Names - We discuss all user-defined names here
5.2 Names - We discuss all user-defined names here
Dynamic Storage Allocation
Data Types In Text: Chapter 6.
Chapter 6 – Data Types CSCE 343.
Day 03 Introduction to C.
CS 326 Programming Languages, Concepts and Implementation
Type Checking, and Scopes
Chapter 13: Pointers, Classes, Virtual Functions, and Abstract Classes
Chapter 5 Names, Bindings, Type Checking, and Scopes.
Names, Bindings, and Scopes
Concepts of programming languages
Pointers Revisited What is variable address, name, value?
Chapter 5 Names, Bindings, Type Checking, and Scopes.
Dynamic Memory Allocation
Chapter 12: Pointers, Classes, Virtual Functions, and Abstract Classes
Object Oriented Programming COP3330 / CGS5409
Names, Bindings, Type Checking, and Scopes
Memory Allocation CS 217.
Names, Bindings, Type Checking, and Scopes
Names and Binding In Text: Chapter 5.
Dynamic Memory.
Names, Bindings, and Scopes
Classes and Objects Object Creation
CMSC 202 Constructors Version 9/10.
Presentation transcript:

Object Lifetime and Pointers various languages…

Why do we care? Could affect performance Could affect reliability Could affect language choice

Object lifetime The lifetime of a variable is the time during which it is bound to a particular memory cell Ruby built-in objects created when values assigned (e.g., x=5) Other classes created with new factory methods also create objects Ruby uses garbage collection to destroy objects that are no longer reachable Quick discuss: why would you expect a language like Ruby, which has dynamic typing, to also have garbage collection? Answer: since Ruby is in charge of allocating space as needed, it also needs to reclaim space.

Object Lifetimes static stack dynamic explicit heap implicit heap

Variables by Lifetime: Static bound to memory cells before execution begins remains bound to the same memory cell throughout execution all FORTRAN 77 variables, C static variables (not C++ class variables) Advantages: efficiency (direct addressing) history-sensitive subprogram support Disadvantage: lack of flexibility (no recursion) storage can't be shared among subprograms void myFn() { static int count=0; count++; cout << count; } myFn(); Quick Ex – turn in Trace! Discuss bullets Draw pic of direct addressing

uninitialized data (BSS) Where is static stored? Assuming C/C++ DATA segment subdivided into parts when loaded into memory high address p temp temp2 command-line args & environment variables stack heap initialized by exec (block started by symbol) uninitialized data (BSS) initialized data text read from program file by exec low address From: http://stackoverflow.com/questions/93039/where-are-static-variables-stored-in-c-c

Variables by Lifetime: Stack Dynamic Created when execution reaches code Allocated from the run-time stack Variables may be allocated at the beginning of a method, even though declarations may be spread throughout Advantages: allows recursion conserves storage Disadvantages: Overhead of allocation and deallocation (not too bad, since all memory allocated/ deallocated together) Subprograms cannot be history sensitive Inefficient references (indirect addressing) void myFn2(int parm) { int temp; … int temp2; } How? Compared to what? parm temp temp2 sp local

Variables by Lifetime: Explicit Heap Dynamic Allocated (and deallocated) by explicit directives during runtime new/delete, malloc/free etc. Accessed only through pointers or references Dynamic objects in C++, all objects in Java Advantage: provides for dynamic storage management Disadvantages: inefficient and unreliable C# methods that define a pointer must include reserved word unsafe void myFn3() { int* nums = new int[5]; … } public void myFn4() Point point = new Point();

Variables by Lifetime: Implicit Heap Dynamic Allocation and deallocation caused by assignment statements No new/delete… these are implied! all variables in APL; all strings and arrays in Perl and JavaScript Advantage: flexibility Disadvantages: Inefficient because all attributes are dynamic loss of error detection list = [2, 4.33, 6, 8]; Which lifetimes are used in Ruby?

Pointers and References

Pointers vs References A pointer type variable has a range of values that consists of memory addresses and a special value, nil or NULL Provide a way to manage dynamic memory A pointer can be used to access a location in the area where storage is dynamically created (usually called a heap)

To Heap or Not In C++ it is not necessary for all pointers to reference heap. Write a few lines of code to show this.

Pointer Operations – (review) Two fundamental operations: assignment and dereferencing Assignment is used to set a pointer variable’s value to some useful address Dereferencing yields the value stored at that address

Pointer Assignment and Dereferencing Illustrated (review) Provide the power of indirect addressing (access variable via address stored in another variable, may not be dynamic) ptr = new int; // assignment *ptr = 206; // dereferencing j = *ptr; // dereferencing

Pointer Operations – (review) Dereferencing can be explicit or implicit C++ uses an explicit operation via * j = *ptr; sets j to the value located at ptr (*ptr) = 5; sets the value located at ptr to 5 C++ also does implicit dereferencing of reference variables void myFun(int& x) { x = 5; } What about Java?

Pointer Arithmetic in C and C++ float stuff[100]; float *p; p = &stuff; int i=3; 1 2 3 4 5 6 7 8 stuff 0x100 p 0x100 p is an alias for stuff *(p+5) is equivalent to stuff[5] and p[5] *(p+i) is equivalent to stuff[i] and p[i]

Pointers in C and C++: void* Domain type need not be fixed (void *) void * can point to any type. Use type casts. void * cannot be de-referenced void * often used in C to pass as arguments. In C++, generally better to use templates so compiler can do appropriate type checking. Remember generic programming units? Early solution

Quick Question Do you remember the difference between a dangling pointer and a memory leak?

Problems with Pointers (review) Dangling pointers (dangerous) A pointer points to a heap-dynamic variable that has been de-allocated may have been reallocated values no longer meaningful writing to it could cause storage manager to fail. Example Point p = new Point(3,4); delete p; // dangling – p still has address! cout << p.getX(); // bad!!

Problems with Pointers (review) Memory Leak (dangerous) Memory has not been deleted (returned to heap manager) No variables contain the address (so not accessible) When is this a problem? Programs written for school? no.. Long-running programs like web servers? yep… Example int[] p = new int[5000]; p = new int[10000];

Reference Types C++ includes a special kind of pointer type called a reference type that is used primarily for formal parameters Constant pointer that is always implicitly dereferenced (notice no * in this code) void myFun(int &y) { y = y + 1; } What does this mean, “constant pointer”?

Reference Types (point of confusion) Constant pointer – can’t change where it points (can change contents) Java extends C++’s reference variables and allows them to replace pointers entirely References refer to object instances – but not necessarily constant (i.e., can change address it references) Implicitly dereferenced (i.e., no * required) No pointer arithmetic Java does NOT have pointers! But references as implemented in Java have many similarities. C# includes both the references of Java and the pointers of C++.

What about Ruby? Does Ruby have references or pointers? Ruby has garbage collection. What problem does garbage collection solve? (dangling pointer? memory leak?) http://stackoverflow.com/questions/7208768/is-it-possible-to-use-pointers-in-ruby