Download presentation
Presentation is loading. Please wait.
Published byPhilippa Cobb Modified over 9 years ago
1
various languages…
2
Could affect performance Could affect reliability Could affect language choice
3
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
4
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: Trace! Discuss bullets
5
Assuming C/C++ DATA segment subdivided into parts when loaded into memory From: http://stackoverflow.com/questions/93039/where-are-static-variables-stored-in-c-c p temp temp2 high address low address command-line args & environment variables stack heap uninitialized data (BSS) initialized by exec (block started by symbol) initialized data text read from program file by exec
6
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; } parm temp temp2 sp local How? Compared to what?
7
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(); }
8
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?
9
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) In C++, is it necessary for all pointers to access heap?
10
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 the location represented by the pointer’s value Dereferencing can be explicit or implicit C++ uses an explicit operation via * j = *ptr; sets j to the value located at ptr C++ also does implicit dereferencing void myFun(int& x) { x = 5; } What about Java?
11
ptr = new int; // assignment *ptr = 206; // dereferencing j = *ptr; // dereferencing Provide the power of indirect addressing (access variable via address stored in another variable, may not be dynamic)
12
float stuff[100]; float *p; p = &stuff; int i=3; 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] stuff 0x100 p 0x100 012345678012345678
13
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.
14
Do you remember the difference between a dangling pointer and a memory leak?
15
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!!
16
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? Example int[] p = new int[5000]; p = new int[10000];
17
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 void myFun(int &y) { y = y + 1; } What does this mean, “constant pointer”?
18
Java extends C++’s reference variables and allows them to replace pointers entirely References refer to object instances – not necessarily constant Implicitly derefenced (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++.
19
Does Ruby have references or pointers? Ruby has garbage collection. http://stackoverflow.com/questions/7208768/is-it-possible-to-use-pointers-in-ruby What problem does garbage collection solve?
Similar presentations
© 2024 SlidePlayer.com Inc.
All rights reserved.