0% found this document useful (0 votes)
46 views

Programming Languages: Memory Management

image

Uploaded by

Jessica Osborne
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
46 views

Programming Languages: Memory Management

image

Uploaded by

Jessica Osborne
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
You are on page 1/ 20

Programming Languages

2nd edition Tucker and Noonan

Chapter 11 Memory Management


C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do it blows your whole leg off. B. Stroustrup

Copyright 2006 The McGraw-Hill Companies, Inc.

11.1 The Heap


The major areas of memory:

Static area: fixed size, fixed content allocated at compile time Run-time stack: variable size, variable content center of control for function call and return Heap: fixed size, variable content dynamically allocated objects and data structures

Copyright 2006 The McGraw-Hill Companies, Inc.

The Structure of Run-Time Memory Fig 11.1

Copyright 2006 The McGraw-Hill Companies, Inc.

Allocating Heap Blocks


The function new allocates a block of heap space to the program.
E.g., new(5) returns the address of the next block of 5 words available in the heap:

Copyright 2006 The McGraw-Hill Companies, Inc.

Stack and Heap Overflow


Stack overflow occurs when the top of stack, a, would exceed its (fixed) limit, h. Heap overflow occurs when a call to new occurs and the heap does not have a large enough block available to satisfy the call.

Copyright 2006 The McGraw-Hill Companies, Inc.

11.2 Implementation of Dynamic Arrays


Consider the declaration int A[n];

Its meaning (Meaning Rule 11.1) is: 1. Compute addr(A[0]) = new(n). 2. Push addr(A[0]) onto the stack. 3. Push n onto the stack. 4. Push int onto the stack. Step 1 creates a heap block for A. Steps 2-4 create the dope vector for A in the stack.
Copyright 2006 The McGraw-Hill Companies, Inc.

Stack and Heap Allocation for int A[10]; Fig 11.3

Copyright 2006 The McGraw-Hill Companies, Inc.

Array References
Meaning Rule 11.2 The meaning of an ArrayRef ar for an array declaration ad is:
1. Compute addr(ad[ar.index]) = addr(ad[0]) + ar.index-1 2. If addr(ad[0])addr(ad[ar.index])<addr(ad[0]) + ad.size,
return the value at addr(ad[ar.index])

3. Otherwise, signal an index-out-of-range error.


E.g., consider the ArrayRef A[5]. The value of A[5] is addressed by addr(A[0])+4. Note: this definition includes run-time range checking.
Copyright 2006 The McGraw-Hill Companies, Inc.

Array Assignments
Meaning Rule 11.3 The meaning of an Assignment as is: 1. Compute addr(ad[ar.index])=addr(ad[0]) + ar.index-1 2. If addr(ad[0])addr(ad[ar.index])<addr(ad[0]) + ad.size then assign the value of as.source to addr(ad[ar.index]). 3. Otherwise, signal an index-out-of-range error. E.g., The assignment A[5]=3 changes the value at heap address addr(A[0])+4 to 3, since

ar.index=5 and addr(A[5])=addr(A[0])+4.

Copyright 2006 The McGraw-Hill Companies, Inc.

11.3 Garbage Collection


Garbage is a block of heap memory that cannot be accessed by the program. Garbage can occur when either:
1. An allocated block of heap memory has no reference to it (an orphan), or 2. A reference exists to a block of memory that is no longer allocated (a widow).

Copyright 2006 The McGraw-Hill Companies, Inc.

Garbage Example (Fig 11.4)


class node { int value; p = new node(); q = new node();

node next;
} node p, q;

q= p;

// creates orphan node

delete p; // creates a widow of q

q is a widow
orphan node
Copyright 2006 The McGraw-Hill Companies, Inc.

Garbage Collection Algorithms


Three classical garbage collection strategies:
Reference Counting - occurs whenever a heap block is allocated, but doesnt detect all garbage. Mark-Sweep - Occurs only on heap overflow, detects all garbage, but makes two passes on the heap. Copy Collection - Faster than mark-sweep, but reduces the size of the heap space.

Copyright 2006 The McGraw-Hill Companies, Inc.

11.3.1 Reference Counting


The heap is a chain of nodes (the free_list). Each node has a reference count (RC) # of pointers referencing that node. Of four nodes, three are active

orphan is to be removed, RC = 0
Copyright 2006 The McGraw-Hill Companies, Inc.

Problem occurs with the circular chains such as the execution of p.next = null
Since qs node has RC=0, the RC for each of its descendents is reduced by 1, it is returned to the free list, and this process repeats for its descendents, leaving:

Note the orphan chain on the right.


Copyright 2006 The McGraw-Hill Companies, Inc.

11.3.2 Mark-Sweep
Each node in the free_list has a mark bit (MB) initially 0. Called only when heap overflow occurs: Pass I: Mark all nodes that are (directly or indirectly) accessible from the stack by setting their MB=1.

Pass II: Sweep through the entire heap and return all unmarked (MB=0) nodes to the free list.
Note: all orphans are detected and returned to the free list.

Copyright 2006 The McGraw-Hill Companies, Inc.

Heap after Pass I of Mark-Sweep


Triggered by q=new node() and free_list = null. All accessible nodes are marked 1.

Copyright 2006 The McGraw-Hill Companies, Inc.

Heap after Pass II of Mark-Sweep


Now free_list is restored and the assignment q=new node() can proceed.

See: http://en.wikipedia.org/wiki/Garbage_collection_%28computer_science%29#Copying_v s._mark-and-sweep_vs._mark-and-don.27t-sweep


Copyright 2006 The McGraw-Hill Companies, Inc.

11.3.3 Copy Collection


Heap partitioned into two halves; only one is active. Triggered by q=new node() and free outside the active half:

Copyright 2006 The McGraw-Hill Companies, Inc.

Accessible nodes are copied to other half

Note: The accessible nodes are packed, orphans are returned to the free list, and the two halves reverse roles.
Copyright 2006 The McGraw-Hill Companies, Inc.

Garbage Collection Summary


Modern algorithms are more elaborate.
Most are hybrids/refinements of the above three.

In Java, garbage collection is built-in.


runs as a low-priority thread. Also, System.gc may be called by the program.

Functional languages have garbage collection built-in. C/C++ default garbage collection to the programmer.

Copyright 2006 The McGraw-Hill Companies, Inc.

You might also like

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy