mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-01-13 23:10:26 -08:00
783 lines
No EOL
59 KiB
HTML
783 lines
No EOL
59 KiB
HTML
|
|
|
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
|
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|
|
|
|
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
|
<head>
|
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
|
|
|
<title>Memory Management Glossary: C — Memory Pool System 1.111.0 documentation</title>
|
|
|
|
<link rel="stylesheet" href="../_static/mps.css" type="text/css" />
|
|
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
|
|
|
|
<script type="text/javascript">
|
|
var DOCUMENTATION_OPTIONS = {
|
|
URL_ROOT: '../',
|
|
VERSION: '1.111.0',
|
|
COLLAPSE_INDEX: false,
|
|
FILE_SUFFIX: '.html',
|
|
HAS_SOURCE: true
|
|
};
|
|
</script>
|
|
<script type="text/javascript" src="../_static/jquery.js"></script>
|
|
<script type="text/javascript" src="../_static/underscore.js"></script>
|
|
<script type="text/javascript" src="../_static/doctools.js"></script>
|
|
<link rel="copyright" title="Copyright" href="../copyright.html" />
|
|
<link rel="top" title="Memory Pool System 1.111.0 documentation" href="../index.html" />
|
|
<link rel="up" title="Memory Management Glossary" href="index.html" />
|
|
<link rel="next" title="Memory Management Glossary: D" href="d.html" />
|
|
<link rel="prev" title="Memory Management Glossary: B" href="b.html" />
|
|
</head>
|
|
<body>
|
|
<div class="related">
|
|
<h3>Navigation</h3>
|
|
<ul>
|
|
<li class="right" style="margin-right: 10px">
|
|
<a href="../genindex.html" title="General Index"
|
|
accesskey="I">index</a></li>
|
|
<li class="right" >
|
|
<a href="d.html" title="Memory Management Glossary: D"
|
|
accesskey="N">next</a> |</li>
|
|
<li class="right" >
|
|
<a href="b.html" title="Memory Management Glossary: B"
|
|
accesskey="P">previous</a> |</li>
|
|
<li><a href="../index.html">Memory Pool System 1.111.0 documentation</a> »</li>
|
|
<li><a href="index.html" accesskey="U">Memory Management Glossary</a> »</li>
|
|
</ul>
|
|
</div>
|
|
|
|
<div class="document">
|
|
<div class="documentwrapper">
|
|
<div class="bodywrapper">
|
|
<div class="body">
|
|
|
|
<div class="section" id="memory-management-glossary-c">
|
|
<span id="glossary-c"></span><h1>Memory Management Glossary: C<a class="headerlink" href="#memory-management-glossary-c" title="Permalink to this headline">¶</a></h1>
|
|
<p class="glossary-alphabet"><a class="reference internal" href="a.html#glossary-a"><em>A</em></a>
|
|
| <a class="reference internal" href="b.html#glossary-b"><em>B</em></a>
|
|
| <a class="reference internal" href="#glossary-c"><em>C</em></a>
|
|
| <a class="reference internal" href="d.html#glossary-d"><em>D</em></a>
|
|
| <a class="reference internal" href="e.html#glossary-e"><em>E</em></a>
|
|
| <a class="reference internal" href="f.html#glossary-f"><em>F</em></a>
|
|
| <a class="reference internal" href="g.html#glossary-g"><em>G</em></a>
|
|
| <a class="reference internal" href="h.html#glossary-h"><em>H</em></a>
|
|
| <a class="reference internal" href="i.html#glossary-i"><em>I</em></a>
|
|
| J
|
|
| <a class="reference internal" href="k.html#glossary-k"><em>K</em></a>
|
|
| <a class="reference internal" href="l.html#glossary-l"><em>L</em></a>
|
|
| <a class="reference internal" href="m.html#glossary-m"><em>M</em></a>
|
|
| <a class="reference internal" href="n.html#glossary-n"><em>N</em></a>
|
|
| <a class="reference internal" href="o.html#glossary-o"><em>O</em></a>
|
|
| <a class="reference internal" href="p.html#glossary-p"><em>P</em></a>
|
|
| <a class="reference internal" href="q.html#glossary-q"><em>Q</em></a>
|
|
| <a class="reference internal" href="r.html#glossary-r"><em>R</em></a>
|
|
| <a class="reference internal" href="s.html#glossary-s"><em>S</em></a>
|
|
| <a class="reference internal" href="t.html#glossary-t"><em>T</em></a>
|
|
| <a class="reference internal" href="u.html#glossary-u"><em>U</em></a>
|
|
| <a class="reference internal" href="v.html#glossary-v"><em>V</em></a>
|
|
| <a class="reference internal" href="w.html#glossary-w"><em>W</em></a>
|
|
| X
|
|
| Y
|
|
| <a class="reference internal" href="z.html#glossary-z"><em>Z</em></a></p>
|
|
<dl class="glossary docutils">
|
|
<dt id="term-cache-1">cache<sup>(1)</sup></dt>
|
|
<dd><div class="admonition-also-known-as first admonition">
|
|
<p class="first admonition-title">Also known as</p>
|
|
<p class="last"><em>memory cache</em>, <em>cache memory</em>.</p>
|
|
</div>
|
|
<p>A processor’s memory cache is a small piece of fast, but more
|
|
expensive memory, usually <a class="reference internal" href="s.html#term-static-memory-1"><em class="xref std std-term">static memory<sup>(1)</sup></em></a>, used for
|
|
copies of parts of <a class="reference internal" href="m.html#term-main-memory"><em class="xref std std-term">main memory</em></a>. The cache is
|
|
automatically used by the processor for fast access to any
|
|
data currently <a class="reference internal" href="r.html#term-resident"><em class="xref std std-term">resident</em></a> there. Access to the cache
|
|
typically takes only a few processor clock cycles, whereas
|
|
access to <a class="reference internal" href="m.html#term-main-memory"><em class="xref std std-term">main memory</em></a> may take tens or even hundreds
|
|
of cycles.</p>
|
|
<p>What part of main memory is resident in a cache, and the
|
|
mechanisms by which it is kept consistent, are quite varied.
|
|
See <a class="reference internal" href="#term-cache-policy"><em class="xref std std-term">cache policy</em></a>.</p>
|
|
<p>Some systems have more than one level of cache. “Level 1
|
|
cache” is the fastest, smallest <a class="reference internal" href="s.html#term-storage-level"><em class="xref std std-term">storage level</em></a>, “level
|
|
2” the next fastest, and so on.</p>
|
|
<div class="admonition-see-also last admonition seealso">
|
|
<p class="first admonition-title">See also</p>
|
|
<p class="last"><a class="reference internal" href="s.html#term-storage-hierarchy"><em class="xref std std-term">storage hierarchy</em></a>, <a class="reference internal" href="#term-cache-2"><em class="xref std std-term">cache<sup>(2)</sup></em></a>.</p>
|
|
</div>
|
|
</dd>
|
|
<dt id="term-cache-2">cache<sup>(2)</sup></dt>
|
|
<dd><p class="first">A cache is any small, fast piece of <a class="reference internal" href="m.html#term-memory-1"><em class="xref std std-term">memory<sup>(1)</sup></em></a>, used
|
|
for copies of data that normally reside in a larger, slower
|
|
piece of storage. The cache is used to speed up access to data
|
|
<a class="reference internal" href="r.html#term-resident"><em class="xref std std-term">resident</em></a> in the slower storage.</p>
|
|
<p>In a typical cache, recently used data is <a class="reference internal" href="r.html#term-resident"><em class="xref std std-term">resident</em></a> in
|
|
the cache (although the details of this depend on the
|
|
<a class="reference internal" href="#term-cache-policy"><em class="xref std std-term">cache policy</em></a>). A <a class="reference internal" href="#term-cache-1"><em class="xref std std-term">cache<sup>(1)</sup></em></a> is the most common
|
|
example of a cache(2).</p>
|
|
<div class="admonition-see-also last admonition seealso">
|
|
<p class="first admonition-title">See also</p>
|
|
<p class="last"><a class="reference internal" href="s.html#term-storage-hierarchy"><em class="xref std std-term">storage hierarchy</em></a>.</p>
|
|
</div>
|
|
</dd>
|
|
<dt id="term-cache-memory">cache memory</dt>
|
|
<dd><div class="admonition-see first last admonition">
|
|
<p class="first admonition-title">See</p>
|
|
<p class="last"><a class="reference internal" href="#term-cache-1"><em class="xref std std-term">cache<sup>(1)</sup></em></a>.</p>
|
|
</div>
|
|
</dd>
|
|
<dt id="term-cache-policy">cache policy</dt>
|
|
<dd><p class="first">Any <a class="reference internal" href="#term-caching-3"><em class="xref std std-term">cache<sup>(3)</sup></em></a> uses a <em>cache policy</em> to
|
|
decide which data to store. A cache policy is an attempt to
|
|
predict the future, so that the cache will provide swift
|
|
responses to future requests.</p>
|
|
<p>Cache policy may be implemented in hardware, software, or a
|
|
combination of both. Some systems allow programs to influence
|
|
cache policy, by giving hints or directions about future use
|
|
of data.</p>
|
|
<p>There are three main aspects of cache behavior which the cache
|
|
policy can affect:</p>
|
|
<ol class="arabic simple">
|
|
<li>Fetch policy. This determines which data is fetched into
|
|
the cache, usually as a result of receiving a request for
|
|
data that isn’t cached.</li>
|
|
<li>Eviction policy. This determines which data is discarded
|
|
from the cache to provide space for newly fetched data.</li>
|
|
<li>Write policy This determines how and when modifications to
|
|
cached data are synchronized with the underlying storage.</li>
|
|
</ol>
|
|
<div class="admonition-see-also admonition seealso">
|
|
<p class="first admonition-title">See also</p>
|
|
<p class="last"><a class="reference internal" href="#term-cache-1"><em class="xref std std-term">cache<sup>(1)</sup></em></a>, <a class="reference internal" href="#term-cache-2"><em class="xref std std-term">cache<sup>(2)</sup></em></a>, <a class="reference internal" href="#term-caching-3"><em class="xref std std-term">cache<sup>(3)</sup></em></a>.</p>
|
|
</div>
|
|
<div class="admonition-related-publication last admonition">
|
|
<p class="first admonition-title">Related publications</p>
|
|
<p class="last"><a class="reference internal" href="../mmref/bib.html#baker91"><em>Baker (1991)</em></a>, <a class="reference internal" href="../mmref/bib.html#wlm92"><em>Wilson et al. (1992)</em></a>, <a class="reference internal" href="../mmref/bib.html#zorn91"><em>Zorn (1991)</em></a>.</p>
|
|
</div>
|
|
</dd>
|
|
<dt id="term-caching-3">caching<sup>(3)</sup></dt>
|
|
<dd><div class="admonition-also-known-as first admonition">
|
|
<p class="first admonition-title">Also known as</p>
|
|
<p class="last"><em>memoization</em>, <em>tabling</em>.</p>
|
|
</div>
|
|
<p><em>Caching</em> is a heuristic that stores answers to questions
|
|
asked in the past in a <em>cache</em> or a <em>table</em>, in order that
|
|
they may be more quickly answered in the future. This process
|
|
is also called memoization and tabling (by the <a class="reference internal" href="../mmref/lang.html#term-prolog"><em class="xref std std-term">Prolog</em></a>
|
|
community).</p>
|
|
<p class="last">A “look-ahead cache” attempts to store answers to questions
|
|
that will be asked soon. A <a class="reference internal" href="#term-cache-2"><em class="xref std std-term">cache<sup>(2)</sup></em></a> is a common
|
|
example of a cache(3).</p>
|
|
</dd>
|
|
<dt id="term-cactus-stack">cactus stack</dt>
|
|
<dd><div class="admonition-also-known-as first admonition">
|
|
<p class="first admonition-title">Also known as</p>
|
|
<p class="last"><em>spaghetti stack</em>.</p>
|
|
</div>
|
|
<p>A cactus stack is a <a class="reference internal" href="s.html#term-stack"><em class="xref std std-term">stack</em></a> with branches. When
|
|
diagrammed, its shape resembles that of a <a class="reference external" href="http://www.azstarnet.com/%7Efosnp/factsaboutsaguaros.html">saguaro cactus</a>.</p>
|
|
<p class="last">In languages that support <a class="reference internal" href="#term-continuation"><em class="xref std std-term">continuations</em></a>,
|
|
<a class="reference internal" href="a.html#term-activation-record"><em class="xref std std-term">activation records</em></a> can have <a class="reference internal" href="i.html#term-indefinite-extent"><em class="xref std std-term">indefinite extent</em></a>.
|
|
One technique for implementing continuations is not to copy
|
|
the activation records that are captured, but rather to create
|
|
a fork in the stack below the captured <a class="reference internal" href="s.html#term-stack-frame"><em class="xref std std-term">stack frames</em></a>,
|
|
so that new frames appear as a parallel branch. Often the
|
|
process of forking is done lazily: captured frames are only
|
|
duplicated if they are modified.</p>
|
|
</dd>
|
|
<dt id="term-card">card</dt>
|
|
<dd>A card is a division of memory, all cards being of equal size
|
|
(in a particular area of discourse). A card is usually bigger
|
|
than a <a class="reference internal" href="w.html#term-word"><em class="xref std std-term">word</em></a> and smaller than a <a class="reference internal" href="p.html#term-page"><em class="xref std std-term">page</em></a>. Cards are
|
|
used in a technique called <a class="reference internal" href="#term-card-marking"><em class="xref std std-term">card marking</em></a> whereby
|
|
<a class="reference internal" href="d.html#term-dirty-bit"><em class="xref std std-term">dirty bits</em></a> (which record which portions of old
|
|
generations have been written into) are maintained for each
|
|
card. Often the use of cards will also entail the use of a
|
|
<a class="reference internal" href="#term-crossing-map"><em class="xref std std-term">crossing map</em></a>.</dd>
|
|
<dt id="term-card-marking">card marking</dt>
|
|
<dd><p class="first">A technique for managing <a class="reference internal" href="p.html#term-pointer"><em class="xref std std-term">pointer</em></a> <a class="reference internal" href="s.html#term-store-1"><em class="xref std std-term">stores<sup>(1)</sup></em></a>
|
|
into old <a class="reference internal" href="g.html#term-generation"><em class="xref std std-term">generations</em></a> (which in turn is used to track
|
|
<a class="reference internal" href="i.html#term-inter-generational-pointer"><em class="xref std std-term">inter-generational pointers</em></a>). Each generation is
|
|
divided into a number of equal-sized <a class="reference internal" href="#term-card"><em class="xref std std-term">cards</em></a>, and when a
|
|
generation is written into, the particular card written to is
|
|
recorded (often by using a <a class="reference internal" href="b.html#term-bitmap"><em class="xref std std-term">bitmap</em></a>). Subsequently, when
|
|
<a class="reference internal" href="s.html#term-scan"><em class="xref std std-term">scanning</em></a> an older generation in order to
|
|
collect a younger generation, only the recorded cards (in the
|
|
old generation) need to be scanned.</p>
|
|
<div class="admonition-see-also admonition seealso">
|
|
<p class="first admonition-title">See also</p>
|
|
<p class="last"><a class="reference internal" href="g.html#term-generational-garbage-collection"><em class="xref std std-term">generational garbage collection</em></a>.</p>
|
|
</div>
|
|
<div class="admonition-related-publication last admonition">
|
|
<p class="first admonition-title">Related publications</p>
|
|
<p class="last"><a class="reference internal" href="../mmref/bib.html#akpy98"><em>Azagury et al. (1998)</em></a>, <a class="reference internal" href="../mmref/bib.html#hh93"><em>Hosking & Hudson (1993)</em></a>, <a class="reference internal" href="../mmref/bib.html#sobalvarro88"><em>Sobalvarro (1988)</em></a>.</p>
|
|
</div>
|
|
</dd>
|
|
<dt id="term-cell">cell</dt>
|
|
<dd><div class="admonition-see first last admonition">
|
|
<p class="first admonition-title">See</p>
|
|
<p class="last"><a class="reference internal" href="o.html#term-object"><em class="xref std std-term">object</em></a>.</p>
|
|
</div>
|
|
</dd>
|
|
<dt id="term-cheney-collector">Cheney collector</dt>
|
|
<dd><div class="admonition-also-known-as first admonition">
|
|
<p class="first admonition-title">Also known as</p>
|
|
<p class="last"><em>Cheney scan</em>.</p>
|
|
</div>
|
|
<p>A Cheney collector uses the <a class="reference internal" href="t.html#term-tospace"><em class="xref std std-term">tospace</em></a> of a
|
|
<a class="reference internal" href="t.html#term-two-space-collector"><em class="xref std std-term">two-space collector</em></a> as a queue of objects remaining to
|
|
be <a class="reference internal" href="s.html#term-scan"><em class="xref std std-term">scanned</em></a>, thus eliminating the need for
|
|
recursion when <a class="reference internal" href="t.html#term-trace"><em class="xref std std-term">tracing</em></a> the <a class="reference internal" href="g.html#term-graph"><em class="xref std std-term">graph</em></a> of
|
|
<a class="reference internal" href="o.html#term-object"><em class="xref std std-term">objects</em></a>.</p>
|
|
<div class="admonition-related-publication last admonition">
|
|
<p class="first admonition-title">Related publication</p>
|
|
<p class="last"><a class="reference internal" href="../mmref/bib.html#cheney70"><em>Cheney (1970)</em></a>.</p>
|
|
</div>
|
|
</dd>
|
|
<dt id="term-cheney-scan">Cheney scan</dt>
|
|
<dd><div class="admonition-see first last admonition">
|
|
<p class="first admonition-title">See</p>
|
|
<p class="last"><a class="reference internal" href="#term-cheney-collector"><em class="xref std std-term">Cheney collector</em></a>.</p>
|
|
</div>
|
|
</dd>
|
|
<dt id="term-clamped-state">clamped state</dt>
|
|
<dd><div class="admonition-in-the-mps first last admonition">
|
|
<p class="first admonition-title">In the MPS</p>
|
|
<p class="last">One of the three states an <a class="reference internal" href="a.html#term-arena"><em class="xref std std-term">arena</em></a> can be in (the
|
|
others being the <a class="reference internal" href="u.html#term-unclamped-state"><em class="xref std std-term">unclamped state</em></a> and the
|
|
<a class="reference internal" href="p.html#term-parked-state"><em class="xref std std-term">parked state</em></a>). In the clamped state, no object
|
|
motion occurs and the staleness of <a class="reference internal" href="l.html#term-location-dependency"><em class="xref std std-term">location
|
|
dependencies</em></a> does not change. However, a <a class="reference internal" href="g.html#term-garbage-collection"><em class="xref std std-term">garbage
|
|
collection</em></a> may be in progress. Call
|
|
<a class="reference internal" href="../topic/arena.html#mps_arena_clamp" title="mps_arena_clamp"><tt class="xref c c-func docutils literal"><span class="pre">mps_arena_clamp()</span></tt></a> to put an arena into the clamped
|
|
state.</p>
|
|
</div>
|
|
</dd>
|
|
<dt id="term-client-arena">client arena</dt>
|
|
<dd><div class="admonition-in-the-mps first last admonition">
|
|
<p class="first admonition-title">In the MPS</p>
|
|
<p class="last">An <a class="reference internal" href="a.html#term-arena-class"><em class="xref std std-term">arena class</em></a> that gets its <a class="reference internal" href="m.html#term-memory-2"><em class="xref std std-term">memory<sup>(2)</sup></em></a>
|
|
from the <a class="reference internal" href="#term-client-program"><em class="xref std std-term">client program</em></a>. See
|
|
<a class="reference internal" href="../topic/arena.html#topic-arena-client"><em>Client arenas</em></a>.</p>
|
|
</div>
|
|
</dd>
|
|
<dt id="term-client-object">client object</dt>
|
|
<dd><div class="admonition-in-the-mps first last admonition">
|
|
<p class="first admonition-title">In the MPS</p>
|
|
<p class="last">A <a class="reference internal" href="f.html#term-formatted-object"><em class="xref std std-term">formatted object</em></a> that contains data from the
|
|
<a class="reference internal" href="#term-client-program"><em class="xref std std-term">client program</em></a>. One of three types of formatted
|
|
objects, the other two being <a class="reference internal" href="f.html#term-forwarding-object"><em class="xref std std-term">forwarding objects</em></a>
|
|
and <a class="reference internal" href="p.html#term-padding-object"><em class="xref std std-term">padding objects</em></a>.</p>
|
|
</div>
|
|
</dd>
|
|
<dt id="term-client-program">client program</dt>
|
|
<dd><div class="admonition-see first last admonition">
|
|
<p class="first admonition-title">See</p>
|
|
<p class="last"><a class="reference internal" href="m.html#term-mutator"><em class="xref std std-term">mutator</em></a></p>
|
|
</div>
|
|
</dd>
|
|
<dt id="term-closure">closure</dt>
|
|
<dd><p class="first">A closure is a function or procedure that is saved along with
|
|
the current bindings from enclosing blocks for later
|
|
invocation.</p>
|
|
<p>Some programming languages, such as <a class="reference internal" href="../mmref/lang.html#term-algol"><em class="xref std std-term">ALGOL</em></a>, permit
|
|
nested blocks to access the local variables of enclosing
|
|
blocks. <a class="reference internal" href="../mmref/lang.html#term-lisp"><em class="xref std std-term">Lisp</em></a>-like languages further permit such an
|
|
inner block (in particular a function or procedure) to be
|
|
saved for later invocation. The act of saving such an inner
|
|
block along with the current bindings of variables in the
|
|
enclosing blocks that are referenced by the inner block, is
|
|
called <em>closing over</em> or <em>capturing</em> those variables. The
|
|
object created is termed <em>a closure</em>. A closure is invoked
|
|
just like the function from which it was built, passing
|
|
whatever parameters the function accepts, but when the
|
|
function executes, the variables that belong to enclosing
|
|
blocks will have the bindings that were in effect when the
|
|
closure was created.</p>
|
|
<div class="admonition-relevance-to-memory-management admonition">
|
|
<p class="first admonition-title">Relevance to memory management</p>
|
|
<p class="last">A closure is typically implemented by saving both the
|
|
function and any <a class="reference internal" href="a.html#term-activation-record"><em class="xref std std-term">activation records</em></a> that contain
|
|
variables referenced by the function. The closure creates
|
|
additional implicit <a class="reference internal" href="r.html#term-reference"><em class="xref std std-term">references</em></a> to the bindings
|
|
closed over and hence must be accounted for in any memory
|
|
management scheme. The closure itself is an object that
|
|
must be managed and may have either <a class="reference internal" href="d.html#term-dynamic-extent"><em class="xref std std-term">dynamic extent</em></a>
|
|
or <a class="reference internal" href="i.html#term-indefinite-extent"><em class="xref std std-term">indefinite extent</em></a> depending on whether it is
|
|
only used by inner blocks of the creating block or passed
|
|
out of the creating block.</p>
|
|
</div>
|
|
<div class="admonition-see-also last admonition seealso">
|
|
<p class="first admonition-title">See also</p>
|
|
<p class="last"><a class="reference internal" href="#term-continuation"><em class="xref std std-term">continuation</em></a>.</p>
|
|
</div>
|
|
</dd>
|
|
<dt id="term-coalesce">coalesce</dt>
|
|
<dd><p class="first">Coalescing is the act of merging two adjacent <a class="reference internal" href="f.html#term-free-block"><em class="xref std std-term">free
|
|
blocks</em></a>.</p>
|
|
<p>Coalescing reduces <a class="reference internal" href="e.html#term-external-fragmentation"><em class="xref std std-term">external fragmentation</em></a>, but is not
|
|
totally effective.</p>
|
|
<p>Coalescing can be done as soon as blocks are freed, or it can
|
|
be deferred until some time later (known as <a class="reference internal" href="d.html#term-deferred-coalescing"><em class="xref std std-term">deferred
|
|
coalescing</em></a>), or it might not be done at all.</p>
|
|
<p class="last"><a class="reference internal" href="../mmref/bib.html#wil95"><em>Wilson et al. (1995)</em></a> has details about
|
|
fragmentation, and which coalescing strategies are effective
|
|
under what circumstances.</p>
|
|
</dd>
|
|
<dt id="term-collect">collect</dt>
|
|
<dd><p class="first">An <a class="reference internal" href="o.html#term-object"><em class="xref std std-term">object</em></a> is collected when it is <a class="reference internal" href="r.html#term-reclaim"><em class="xref std std-term">reclaimed</em></a> by
|
|
a <a class="reference internal" href="g.html#term-garbage-collector"><em class="xref std std-term">garbage collector</em></a>.</p>
|
|
<div class="admonition-similar-term last admonition">
|
|
<p class="first admonition-title">Similar term</p>
|
|
<p class="last"><a class="reference internal" href="r.html#term-reclaim"><em class="xref std std-term">reclaim</em></a>.</p>
|
|
</div>
|
|
</dd>
|
|
<dt id="term-collection">collection</dt>
|
|
<dd><div class="admonition-see first last admonition">
|
|
<p class="first admonition-title">See</p>
|
|
<p class="last"><a class="reference internal" href="#term-collection-cycle"><em class="xref std std-term">collection cycle</em></a>.</p>
|
|
</div>
|
|
</dd>
|
|
<dt id="term-collection-cycle">collection cycle</dt>
|
|
<dd><div class="admonition-also-known-as first admonition">
|
|
<p class="first admonition-title">Also known as</p>
|
|
<p class="last"><em>collection</em>.</p>
|
|
</div>
|
|
<p>A collection cycle is a single complete execution of a
|
|
<a class="reference internal" href="t.html#term-tracing-garbage-collection"><em class="xref std std-term">tracing garbage collection</em></a> algorithm.</p>
|
|
<p>Each collection cycle includes (not necessarily in strict
|
|
order) choosing a <a class="reference internal" href="#term-condemned-set"><em class="xref std std-term">condemned set</em></a>; <a class="reference internal" href="s.html#term-scan"><em class="xref std std-term">scanning</em></a> <a class="reference internal" href="r.html#term-root"><em class="xref std std-term">roots</em></a> and <a class="reference internal" href="o.html#term-object"><em class="xref std std-term">objects</em></a> that have not been
|
|
condemned; <a class="reference internal" href="t.html#term-trace"><em class="xref std std-term">tracing</em></a> the object graph to find
|
|
all condemned objects that are <a class="reference internal" href="r.html#term-reachable"><em class="xref std std-term">reachable</em></a>; and
|
|
<a class="reference internal" href="r.html#term-reclaim"><em class="xref std std-term">reclaiming</em></a> those that were not reachable.</p>
|
|
<p class="last">In non-incremental garbage collection, the <a class="reference internal" href="m.html#term-mutator"><em class="xref std std-term">mutator</em></a>
|
|
pauses at the start of a collection cycle and cannot continue
|
|
until it is complete. In <a class="reference internal" href="i.html#term-incremental-garbage-collection"><em class="xref std std-term">incremental</em></a> and <a class="reference internal" href="p.html#term-parallel-garbage-collection"><em class="xref std std-term">parallel</em></a> garbage collection, a collection cycle can be
|
|
interleaved with, or simultaneous to, mutator activity.</p>
|
|
</dd>
|
|
<dt id="term-collector-1">collector<sup>(1)</sup></dt>
|
|
<dd><div class="admonition-see first last admonition">
|
|
<p class="first admonition-title">See</p>
|
|
<p class="last"><a class="reference internal" href="g.html#term-garbage-collector"><em class="xref std std-term">garbage collector</em></a>.</p>
|
|
</div>
|
|
</dd>
|
|
<dt id="term-collector-2">collector<sup>(2)</sup></dt>
|
|
<dd><p class="first">In a <a class="reference internal" href="g.html#term-garbage-collection"><em class="xref std std-term">garbage-collected</em></a> system,
|
|
the part that executes the garbage collection code, which
|
|
discovers unused <a class="reference internal" href="m.html#term-memory-1"><em class="xref std std-term">memory<sup>(1)</sup></em></a> and <a class="reference internal" href="r.html#term-reclaim"><em class="xref std std-term">reclaims</em></a> it.</p>
|
|
<p>For purposes of describing <a class="reference internal" href="i.html#term-incremental-garbage-collection"><em class="xref std std-term">incremental garbage
|
|
collection</em></a>, the system is divided into the <a class="reference internal" href="m.html#term-mutator"><em class="xref std std-term">mutator</em></a>
|
|
and the <em>collector</em>. These can be separate threads of
|
|
computation, or interleaved within the same thread.</p>
|
|
<div class="admonition-historical-note admonition">
|
|
<p class="first admonition-title">Historical note</p>
|
|
<p class="last">This term is due to <a class="reference internal" href="../mmref/bib.html#dlmss76"><em>Dijkstra et al. (1976)</em></a>.</p>
|
|
</div>
|
|
<div class="admonition-opposite-term last admonition">
|
|
<p class="first admonition-title">Opposite term</p>
|
|
<p class="last"><a class="reference internal" href="m.html#term-mutator"><em class="xref std std-term">mutator</em></a>.</p>
|
|
</div>
|
|
</dd>
|
|
<dt id="term-color"><span id="term-colour"></span>color<br />colour</dt>
|
|
<dd>In a <a class="reference internal" href="t.html#term-tri-color-marking"><em class="xref std std-term">tri-color marking</em></a> scheme, each <a class="reference internal" href="n.html#term-node"><em class="xref std std-term">node</em></a> has a
|
|
one of three colors: <a class="reference internal" href="b.html#term-black"><em class="xref std std-term">black</em></a>, <a class="reference internal" href="w.html#term-white"><em class="xref std std-term">white</em></a>, or
|
|
<a class="reference internal" href="g.html#term-gray"><em class="xref std std-term">gray</em></a>. In a <a class="reference internal" href="t.html#term-treadmill"><em class="xref std std-term">treadmill</em></a>, nodes may also be
|
|
colored <a class="reference internal" href="o.html#term-off-white"><em class="xref std std-term">off-white</em></a>.</dd>
|
|
<dt id="term-commit-limit">commit limit</dt>
|
|
<dd><div class="admonition-in-the-mps first last admonition">
|
|
<p class="first admonition-title">In the MPS</p>
|
|
<p class="last">The commit limit is a limit on the <a class="reference internal" href="m.html#term-mapped"><em class="xref std std-term">committed</em></a> <a class="reference internal" href="m.html#term-memory-2"><em class="xref std std-term">memory<sup>(2)</sup></em></a> that the <a class="reference internal" href="a.html#term-arena"><em class="xref std std-term">arena</em></a> will
|
|
obtain from the operating system. It can be changed by
|
|
calling <a class="reference internal" href="../topic/arena.html#mps_arena_commit_limit_set" title="mps_arena_commit_limit_set"><tt class="xref c c-func docutils literal"><span class="pre">mps_arena_commit_limit_set()</span></tt></a>.</p>
|
|
</div>
|
|
</dd>
|
|
<dt id="term-committed-1">committed<sup>(1)</sup></dt>
|
|
<dd><div class="admonition-see first last admonition">
|
|
<p class="first admonition-title">See</p>
|
|
<p class="last"><a class="reference internal" href="m.html#term-mapped"><em class="xref std std-term">mapped</em></a>.</p>
|
|
</div>
|
|
</dd>
|
|
<dt id="term-committed-2">committed<sup>(2)</sup></dt>
|
|
<dd><div class="admonition-in-the-mps first last admonition">
|
|
<p class="first admonition-title">In the MPS</p>
|
|
<p class="last">A block has been <em>committed</em> if it is fully initialized
|
|
and is under the management of the MPS, as opposed to a
|
|
block that is merely <em>reserved</em>. See
|
|
<a class="reference internal" href="../topic/allocation.html#topic-allocation-point-protocol"><em>Allocation point protocol</em></a>.</p>
|
|
</div>
|
|
</dd>
|
|
<dt id="term-compactifying">compactifying</dt>
|
|
<dd><div class="admonition-see first last admonition">
|
|
<p class="first admonition-title">See</p>
|
|
<p class="last"><a class="reference internal" href="#term-compaction"><em class="xref std std-term">compaction</em></a>.</p>
|
|
</div>
|
|
</dd>
|
|
<dt id="term-compaction">compaction</dt>
|
|
<dd><div class="admonition-also-known-as first admonition">
|
|
<p class="first admonition-title">Also known as</p>
|
|
<p class="last"><em>compactifying</em>.</p>
|
|
</div>
|
|
<p>Compaction is the process of <a class="reference internal" href="m.html#term-moving-garbage-collector"><em class="xref std std-term">moving</em></a> <a class="reference internal" href="l.html#term-live"><em class="xref std std-term">live</em></a> <a class="reference internal" href="o.html#term-object"><em class="xref std std-term">objects</em></a> to eliminate
|
|
<a class="reference internal" href="d.html#term-dead"><em class="xref std std-term">dead</em></a> space between them. Some people call this
|
|
<em>compactifying</em>, to distinguish it from techniques for
|
|
compressing data structures.</p>
|
|
<p class="last">Compaction is used to avoid <a class="reference internal" href="e.html#term-external-fragmentation"><em class="xref std std-term">external fragmentation</em></a> and
|
|
to increase <a class="reference internal" href="l.html#term-locality-of-reference"><em class="xref std std-term">locality of reference</em></a>.</p>
|
|
</dd>
|
|
<dt id="term-composite-object">composite object</dt>
|
|
<dd><p class="first">In the <a class="reference internal" href="../mmref/lang.html#term-postscript"><em class="xref std std-term">PostScript</em></a> language, <em>composite objects</em> are
|
|
the <a class="reference internal" href="b.html#term-boxed"><em class="xref std std-term">boxed</em></a> objects.</p>
|
|
<p>Unlike a <a class="reference internal" href="s.html#term-simple-object"><em class="xref std std-term">simple object</em></a>, the main data (what PostScript
|
|
calls <em>the value</em>) in a composite object are stored
|
|
separately, in <a class="reference internal" href="v.html#term-vm-2"><em class="xref std std-term">VM<sup>(2)</sup></em></a>. Several composite objects can
|
|
share the same value.</p>
|
|
<div class="admonition-similar-term admonition">
|
|
<p class="first admonition-title">Similar term</p>
|
|
<p class="last"><a class="reference internal" href="b.html#term-boxed"><em class="xref std std-term">boxed</em></a>.</p>
|
|
</div>
|
|
<div class="admonition-opposite-term last admonition">
|
|
<p class="first admonition-title">Opposite term</p>
|
|
<p class="last"><a class="reference internal" href="s.html#term-simple-object"><em class="xref std std-term">simple object</em></a>.</p>
|
|
</div>
|
|
</dd>
|
|
<dt id="term-comprehensive">comprehensive</dt>
|
|
<dd><p class="first">A <a class="reference internal" href="#term-collector-1"><em class="xref std std-term">collector<sup>(1)</sup></em></a> is <em>comprehensive</em> if all
|
|
<a class="reference internal" href="g.html#term-garbage"><em class="xref std std-term">garbage</em></a> (or, all <a class="reference internal" href="u.html#term-unreachable"><em class="xref std std-term">unreachable</em></a> <a class="reference internal" href="o.html#term-object"><em class="xref std std-term">objects</em></a>)
|
|
is <a class="reference internal" href="r.html#term-reclaim"><em class="xref std std-term">reclaimed</em></a> in one <a class="reference internal" href="#term-collection-cycle"><em class="xref std std-term">collection cycle</em></a>.</p>
|
|
<div class="admonition-see-also last admonition seealso">
|
|
<p class="first admonition-title">See also</p>
|
|
<p class="last"><a class="reference internal" href="g.html#term-garbage-collection"><em class="xref std std-term">garbage collection</em></a>.</p>
|
|
</div>
|
|
</dd>
|
|
<dt id="term-concurrent-garbage-collection">concurrent garbage collection</dt>
|
|
<dd><div class="admonition-see first last admonition">
|
|
<p class="first admonition-title">See</p>
|
|
<p class="last"><a class="reference internal" href="p.html#term-parallel-garbage-collection"><em class="xref std std-term">parallel garbage collection</em></a>.</p>
|
|
</div>
|
|
</dd>
|
|
<dt id="term-condemned-set">condemned set</dt>
|
|
<dd><div class="admonition-also-known-as first admonition">
|
|
<p class="first admonition-title">Also known as</p>
|
|
<p class="last"><em>threatened set</em>.</p>
|
|
</div>
|
|
<p><em>Condemned</em> <a class="reference internal" href="o.html#term-object"><em class="xref std std-term">objects</em></a> are those which are
|
|
candidates for <a class="reference internal" href="r.html#term-recycle"><em class="xref std std-term">recycling</em></a> within a
|
|
<a class="reference internal" href="#term-collection-cycle"><em class="xref std std-term">collection cycle</em></a>.</p>
|
|
<p>At the start of a collection cycle, the <a class="reference internal" href="#term-collector-1"><em class="xref std std-term">collector<sup>(1)</sup></em></a>
|
|
may choose to condemn some objects (the <em>condemned set</em> or
|
|
<em>threatened set</em>) but not to condemn others (the <a class="reference internal" href="i.html#term-immune-set"><em class="xref std std-term">immune
|
|
set</em></a>). Objects that are not condemned are assumed to be
|
|
<a class="reference internal" href="l.html#term-live"><em class="xref std std-term">live</em></a> and behave as <a class="reference internal" href="r.html#term-root"><em class="xref std std-term">roots</em></a> for the
|
|
purposes of that collection cycle.</p>
|
|
<p>Many simple <a class="reference internal" href="t.html#term-tracing-garbage-collection"><em class="xref std std-term">tracing garbage collection</em></a> algorithms
|
|
begin by condemning all objects, but <a class="reference internal" href="g.html#term-generational-garbage-collection"><em class="xref std std-term">generational
|
|
garbage collectors</em></a> will
|
|
condemn individual <a class="reference internal" href="g.html#term-generation"><em class="xref std std-term">generations</em></a> or
|
|
combinations of generations. Often young generations are
|
|
condemned but older ones are not, because objects in older
|
|
generations are less likely to have become
|
|
<a class="reference internal" href="u.html#term-unreachable"><em class="xref std std-term">unreachable</em></a>.</p>
|
|
<p>In collectors using <a class="reference internal" href="t.html#term-tri-color-marking"><em class="xref std std-term">tri-color marking</em></a>, at the start of
|
|
a collection cycle the condemned set is exactly the set of
|
|
objects that the collector colors <a class="reference internal" href="w.html#term-white"><em class="xref std std-term">white</em></a>.</p>
|
|
<div class="admonition-opposite-term last admonition">
|
|
<p class="first admonition-title">Opposite term</p>
|
|
<p class="last"><a class="reference internal" href="i.html#term-immune-set"><em class="xref std std-term">immune set</em></a>.</p>
|
|
</div>
|
|
</dd>
|
|
<dt id="term-connected">connected</dt>
|
|
<dd><p class="first"><a class="reference internal" href="o.html#term-object"><em class="xref std std-term">Objects</em></a> are connected if and only if one
|
|
contains a <a class="reference internal" href="r.html#term-reference"><em class="xref std std-term">reference</em></a> to the other.</p>
|
|
<div class="admonition-see-also last admonition seealso">
|
|
<p class="first admonition-title">See also</p>
|
|
<p class="last"><a class="reference internal" href="g.html#term-graph"><em class="xref std std-term">graph</em></a>.</p>
|
|
</div>
|
|
</dd>
|
|
<dt id="term-cons-1">cons<sup>(1)</sup></dt>
|
|
<dd><p class="first">In <a class="reference internal" href="../mmref/lang.html#term-lisp"><em class="xref std std-term">Lisp</em></a>, <tt class="docutils literal"><span class="pre">cons</span></tt> is a primitive operation creating a
|
|
list element (from English “CONStruct”). By extension, a
|
|
<em>cons</em> is the element created.</p>
|
|
<div class="admonition-related-link last admonition">
|
|
<p class="first admonition-title">Related link</p>
|
|
<p class="last"><a class="reference external" href="http://www.lispworks.com/documentation/lw60/CLHS/Body/f_cons.htm">Function CONS in the Common Lisp HyperSpec</a>.</p>
|
|
</div>
|
|
</dd>
|
|
<dt id="term-cons-2">cons<sup>(2)</sup></dt>
|
|
<dd><div class="admonition-see first last admonition">
|
|
<p class="first admonition-title">See</p>
|
|
<p class="last"><a class="reference internal" href="a.html#term-allocate"><em class="xref std std-term">allocate</em></a>.</p>
|
|
</div>
|
|
</dd>
|
|
<dt id="term-conservative-garbage-collection">conservative garbage collection</dt>
|
|
<dd><p class="first">In conservative <a class="reference internal" href="g.html#term-garbage-collection"><em class="xref std std-term">garbage collection</em></a>, the layout of
|
|
<a class="reference internal" href="o.html#term-object"><em class="xref std std-term">objects</em></a> and <a class="reference internal" href="r.html#term-root"><em class="xref std std-term">roots</em></a> is not
|
|
known, instead the <a class="reference internal" href="#term-collector-1"><em class="xref std std-term">collector<sup>(1)</sup></em></a> assumes that any
|
|
field that looks like a <a class="reference internal" href="p.html#term-pointer"><em class="xref std std-term">pointer</em></a> <em>might</em> be a
|
|
<a class="reference internal" href="r.html#term-reference"><em class="xref std std-term">reference</em></a>.</p>
|
|
<p>Conservative collectors can work with programs where
|
|
information about the <a class="reference internal" href="m.html#term-memory-2"><em class="xref std std-term">memory<sup>(2)</sup></em></a> layout is not
|
|
available, because, for example, the language doesn’t support
|
|
<a class="reference internal" href="g.html#term-garbage-collection"><em class="xref std std-term">garbage collection</em></a>.</p>
|
|
<p>A conservative collector doesn’t need to know the
|
|
<a class="reference internal" href="f.html#term-format"><em class="xref std std-term">format</em></a> of the objects, it just needs some idea of
|
|
where the object boundaries are. It regards any field value
|
|
that looks like a pointer to an object (or, sometimes, into
|
|
the middle of one), as preventing the <a class="reference internal" href="r.html#term-recycle"><em class="xref std std-term">recycling</em></a> of that object. It can’t <a class="reference internal" href="m.html#term-moving-garbage-collector"><em class="xref std std-term">move</em></a> objects, because then the references to
|
|
the moved objects would need to be updated, and such
|
|
<a class="reference internal" href="a.html#term-ambiguous-reference"><em class="xref std std-term">ambiguous references</em></a> must not be modified, in case
|
|
they weren’t pointers after all. Therefore, conservative
|
|
collectors are usually <a class="reference internal" href="m.html#term-mark-sweep"><em class="xref std std-term">mark-sweep collectors</em></a>.</p>
|
|
<p>Because references are ambiguous, some objects may be retained
|
|
despite being actually <a class="reference internal" href="u.html#term-unreachable"><em class="xref std std-term">unreachable</em></a>. In practice, this
|
|
happens rarely, and refinements such as <a class="reference internal" href="b.html#term-blacklisting"><em class="xref std std-term">black-listing</em></a> can further reduce the odds.</p>
|
|
<div class="admonition-opposite-term admonition">
|
|
<p class="first admonition-title">Opposite term</p>
|
|
<p class="last"><a class="reference internal" href="e.html#term-exact-garbage-collection"><em class="xref std std-term">exact garbage collection</em></a>.</p>
|
|
</div>
|
|
<div class="admonition-see-also admonition seealso">
|
|
<p class="first admonition-title">See also</p>
|
|
<p class="last"><a class="reference internal" href="a.html#term-ambiguous-root"><em class="xref std std-term">ambiguous root</em></a>, <a class="reference internal" href="s.html#term-semi-conservative-garbage-collection"><em class="xref std std-term">semi-conservative garbage collection</em></a>, <a class="reference internal" href="i.html#term-interior-pointer"><em class="xref std std-term">interior pointer</em></a>.</p>
|
|
</div>
|
|
<div class="admonition-related-publication last admonition">
|
|
<p class="first admonition-title">Related publications</p>
|
|
<p class="last"><a class="reference internal" href="../mmref/bib.html#bw88"><em>Boehm & Weiser (1988)</em></a>, <a class="reference internal" href="../mmref/bib.html#boehm93"><em>Boehm (1993)</em></a>.</p>
|
|
</div>
|
|
</dd>
|
|
<dt id="term-constant-root">constant root</dt>
|
|
<dd><div class="admonition-in-the-mps first last admonition">
|
|
<p class="first admonition-title">In the MPS</p>
|
|
<p class="last">A <a class="reference internal" href="r.html#term-root"><em class="xref std std-term">root</em></a> that the <a class="reference internal" href="#term-client-program"><em class="xref std std-term">client program</em></a> promises
|
|
not change after it is registered, by specifying the
|
|
<a class="reference internal" href="r.html#term-root-mode"><em class="xref std std-term">root mode</em></a> <a class="reference internal" href="../topic/root.html#MPS_RM_CONST" title="MPS_RM_CONST"><tt class="xref c c-macro docutils literal"><span class="pre">MPS_RM_CONST</span></tt></a> when calling a
|
|
registration function such as <a class="reference internal" href="../topic/root.html#mps_root_create" title="mps_root_create"><tt class="xref c c-func docutils literal"><span class="pre">mps_root_create()</span></tt></a>.</p>
|
|
</div>
|
|
</dd>
|
|
<dt id="term-constructor-1">constructor<sup>(1)</sup></dt>
|
|
<dd><p class="first">A constructor is a function or method that <a class="reference internal" href="a.html#term-allocate"><em class="xref std std-term">allocates</em></a> and initializes an <a class="reference internal" href="o.html#term-object"><em class="xref std std-term">object</em></a>.</p>
|
|
<div class="admonition-opposite-term last admonition">
|
|
<p class="first admonition-title">Opposite term</p>
|
|
<p class="last"><a class="reference internal" href="d.html#term-destructor-1"><em class="xref std std-term">destructor<sup>(1)</sup></em></a>.</p>
|
|
</div>
|
|
</dd>
|
|
<dt id="term-constructor-2">constructor<sup>(2)</sup></dt>
|
|
<dd><p class="first">In <a class="reference internal" href="../mmref/lang.html#term-6"><em class="xref std std-term">C++</em></a>, a <em>constructor</em> is a member function that is
|
|
used to initialize a newly-<a class="reference internal" href="a.html#term-allocate"><em class="xref std std-term">allocated</em></a> object.</p>
|
|
<p>The actual allocation of <a class="reference internal" href="m.html#term-memory-2"><em class="xref std std-term">memory<sup>(2)</sup></em></a> is performed by
|
|
<tt class="docutils literal"><span class="pre">operator</span> <span class="pre">new</span></tt> or the compiler (for <a class="reference internal" href="s.html#term-static-allocation"><em class="xref std std-term">static</em></a> and <a class="reference internal" href="s.html#term-stack-allocation"><em class="xref std std-term">stack allocation</em></a>), and the new
|
|
<a class="reference internal" href="b.html#term-block"><em class="xref std std-term">block</em></a> is then passed to the appropriate constructor.</p>
|
|
<div class="admonition-see-also last admonition seealso">
|
|
<p class="first admonition-title">See also</p>
|
|
<p class="last"><a class="reference internal" href="d.html#term-destructor-2"><em class="xref std std-term">destructor<sup>(2)</sup></em></a>.</p>
|
|
</div>
|
|
</dd>
|
|
<dt id="term-continuation">continuation</dt>
|
|
<dd><p class="first">A continuation is the data required to restore an execution
|
|
context after invocation of another context, typically as a
|
|
subroutine.</p>
|
|
<div class="admonition-relevance-to-memory-management admonition">
|
|
<p class="first admonition-title">Relevance to memory management</p>
|
|
<p class="last">If continuations can be represented as first-class
|
|
objects, as in <a class="reference internal" href="../mmref/lang.html#term-scheme"><em class="xref std std-term">Scheme</em></a>, the execution contexts can
|
|
no longer be stored on a <a class="reference internal" href="s.html#term-stack"><em class="xref std std-term">stack</em></a>, instead, (at least
|
|
some) <a class="reference internal" href="a.html#term-activation-record"><em class="xref std std-term">activation records</em></a> have
|
|
to be <a class="reference internal" href="h.html#term-heap-allocation"><em class="xref std std-term">heap-allocated</em></a>.</p>
|
|
</div>
|
|
<div class="admonition-see-also last admonition seealso">
|
|
<p class="first admonition-title">See also</p>
|
|
<p class="last"><a class="reference internal" href="#term-closure"><em class="xref std std-term">closure</em></a>.</p>
|
|
</div>
|
|
</dd>
|
|
<dt id="term-control-stack">control stack</dt>
|
|
<dd><div class="admonition-also-known-as first admonition">
|
|
<p class="first admonition-title">Also known as</p>
|
|
<p class="last"><em>activation stack</em>, <em>execution stack</em>.</p>
|
|
</div>
|
|
<p>A <a class="reference internal" href="s.html#term-stack"><em class="xref std std-term">stack</em></a> that stores <a class="reference internal" href="a.html#term-activation-record"><em class="xref std std-term">activation records</em></a>, particularly subroutine return
|
|
information, is known as a <em>control stack</em>.</p>
|
|
<p>Typically the control stack is supported and used by the
|
|
hardware architecture and the operating system, limiting the
|
|
types and sizes of <a class="reference internal" href="o.html#term-object"><em class="xref std std-term">objects</em></a> that can be stored
|
|
on it. Often, only one type of object, a <a class="reference internal" href="s.html#term-stack-frame"><em class="xref std std-term">stack frame</em></a>,
|
|
is permitted, and the layout of that is defined by the
|
|
hardware architecture.</p>
|
|
<div class="admonition-relevance-to-memory-management admonition">
|
|
<p class="first admonition-title">Relevance to memory management</p>
|
|
<p class="last">Theoretically, a control stack is simply an array of
|
|
activation records, and hence just another object managed
|
|
by the <a class="reference internal" href="m.html#term-memory-manager"><em class="xref std std-term">memory manager</em></a>. In practice, the control
|
|
stack is central to the performance of the hardware
|
|
architecture and may require special treatment. In
|
|
particular, it may not be accessible as ordinary
|
|
<a class="reference internal" href="m.html#term-memory-2"><em class="xref std std-term">memory<sup>(2)</sup></em></a>, or it may have its own <a class="reference internal" href="#term-cache-2"><em class="xref std std-term">cache<sup>(2)</sup></em></a> with specific updating requirements.</p>
|
|
</div>
|
|
<div class="admonition-similar-term admonition">
|
|
<p class="first admonition-title">Similar term</p>
|
|
<p class="last"><a class="reference internal" href="s.html#term-stack"><em class="xref std std-term">stack</em></a>.</p>
|
|
</div>
|
|
<div class="admonition-see-also last admonition seealso">
|
|
<p class="first admonition-title">See also</p>
|
|
<p class="last"><a class="reference internal" href="d.html#term-data-stack"><em class="xref std std-term">data stack</em></a>.</p>
|
|
</div>
|
|
</dd>
|
|
<dt id="term-cool">cool</dt>
|
|
<dd><div class="admonition-in-the-mps first last admonition">
|
|
<p class="first admonition-title">In the MPS</p>
|
|
<p class="last">A <a class="reference internal" href="v.html#term-variety"><em class="xref std std-term">variety</em></a> in which most MPS functions
|
|
<a class="reference internal" href="a.html#term-assertion"><em class="xref std std-term">assert</em></a> that their data structures are
|
|
valid, even functions on the <a class="reference internal" href="#term-critical-path"><em class="xref std std-term">critical path</em></a>. See
|
|
<a class="reference internal" href="../guide/build.html#guide-build"><em>Building the Memory Pool System</em></a>. Compare <a class="reference internal" href="h.html#term-hot"><em class="xref std std-term">hot</em></a> and <a class="reference internal" href="r.html#term-rash"><em class="xref std std-term">rash</em></a>.</p>
|
|
</div>
|
|
</dd>
|
|
<dt id="term-copy-method">copy method</dt>
|
|
<dd><div class="admonition-in-the-mps first last admonition">
|
|
<p class="first admonition-title">In the MPS</p>
|
|
<p class="last">A copy method is one of the methods in an <a class="reference internal" href="o.html#term-object-format"><em class="xref std std-term">object
|
|
format</em></a>. Formerly, the MPS called this method to copy a
|
|
<a class="reference internal" href="f.html#term-formatted-object"><em class="xref std std-term">formatted object</em></a> during <a class="reference internal" href="m.html#term-moving-garbage-collector"><em class="xref std std-term">moving garbage
|
|
collection</em></a>. Now it just copies
|
|
the bytes and the copy method is ignored.</p>
|
|
</div>
|
|
</dd>
|
|
<dt id="term-copying-garbage-collection">copying garbage collection</dt>
|
|
<dd><div class="admonition-also-known-as first admonition">
|
|
<p class="first admonition-title">Also known as</p>
|
|
<p class="last"><em>scavenging garbage collection</em>.</p>
|
|
</div>
|
|
<p>Copying garbage collection is a kind of <a class="reference internal" href="t.html#term-tracing-garbage-collection"><em class="xref std std-term">tracing garbage
|
|
collection</em></a> that operates by <a class="reference internal" href="r.html#term-relocation"><em class="xref std std-term">relocating</em></a>
|
|
<a class="reference internal" href="r.html#term-reachable"><em class="xref std std-term">reachable</em></a> <a class="reference internal" href="o.html#term-object"><em class="xref std std-term">objects</em></a> (this is sometimes called
|
|
<em>scavenging</em>) and then <a class="reference internal" href="r.html#term-reclaim"><em class="xref std std-term">reclaiming</em></a> objects
|
|
that are left behind, which must be <a class="reference internal" href="u.html#term-unreachable"><em class="xref std std-term">unreachable</em></a> and
|
|
therefore <a class="reference internal" href="d.html#term-dead"><em class="xref std std-term">dead</em></a>.</p>
|
|
<p>A copying garbage collection relies on being able to find and
|
|
correct all <a class="reference internal" href="r.html#term-reference"><em class="xref std std-term">references</em></a> to copied objects.</p>
|
|
<div class="figure align-center">
|
|
<img alt="Diagram: Copying garbage collection." src="../_images/copying.svg" /><p class="caption">Copying garbage collection.</p>
|
|
</div>
|
|
<div class="admonition-similar-term admonition">
|
|
<p class="first admonition-title">Similar term</p>
|
|
<p class="last"><a class="reference internal" href="m.html#term-moving-garbage-collector"><em class="xref std std-term">moving</em></a>.</p>
|
|
</div>
|
|
<div class="admonition-see-also last admonition seealso">
|
|
<p class="first admonition-title">See also</p>
|
|
<p class="last"><a class="reference internal" href="b.html#term-broken-heart"><em class="xref std std-term">broken heart</em></a>, <a class="reference internal" href="f.html#term-forwarding-pointer"><em class="xref std std-term">forwarding pointer</em></a>, <a class="reference internal" href="t.html#term-two-space-collector"><em class="xref std std-term">two-space collector</em></a>.</p>
|
|
</div>
|
|
</dd>
|
|
<dt id="term-core">core</dt>
|
|
<dd><p class="first">A historical synonym for <a class="reference internal" href="m.html#term-main-memory"><em class="xref std std-term">main memory</em></a>, deriving from
|
|
the <em>cores</em> or ferrite rings which were once the main
|
|
technology used to implement it.</p>
|
|
<div class="admonition-similar-term last admonition">
|
|
<p class="first admonition-title">Similar term</p>
|
|
<p class="last"><a class="reference internal" href="m.html#term-main-memory"><em class="xref std std-term">main memory</em></a>.</p>
|
|
</div>
|
|
</dd>
|
|
<dt id="term-creation-space">creation space</dt>
|
|
<dd><p class="first">In <a class="reference internal" href="g.html#term-generational-garbage-collection"><em class="xref std std-term">generational garbage collection</em></a>, when
|
|
<a class="reference internal" href="g.html#term-generation"><em class="xref std std-term">generations</em></a> are divided into
|
|
<a class="reference internal" href="b.html#term-bucket"><em class="xref std std-term">buckets</em></a>, the creation space is where new
|
|
<a class="reference internal" href="o.html#term-object"><em class="xref std std-term">objects</em></a> are created in each generation.</p>
|
|
<p>This term is sometimes used as a synonym for <a class="reference internal" href="n.html#term-nursery-space"><em class="xref std std-term">nursery space</em></a>.</p>
|
|
<div class="admonition-opposite-term admonition">
|
|
<p class="first admonition-title">Opposite term</p>
|
|
<p class="last"><a class="reference internal" href="a.html#term-aging-space"><em class="xref std std-term">aging space</em></a>.</p>
|
|
</div>
|
|
<div class="admonition-see-also last admonition seealso">
|
|
<p class="first admonition-title">See also</p>
|
|
<p class="last"><a class="reference internal" href="g.html#term-generational-garbage-collection"><em class="xref std std-term">generational garbage collection</em></a>.</p>
|
|
</div>
|
|
</dd>
|
|
<dt id="term-critical-path">critical path</dt>
|
|
<dd><div class="admonition-in-the-mps first last admonition">
|
|
<p class="first admonition-title">In the MPS</p>
|
|
<p class="last">The sequence of operations on which the MPS spends the
|
|
majority of its time, consisting of <a class="reference internal" href="s.html#term-scan"><em class="xref std std-term">scanning</em></a>, <a class="reference internal" href="f.html#term-fix"><em class="xref std std-term">fixing</em></a>, <a class="reference internal" href="m.html#term-marking"><em class="xref std std-term">marking</em></a> and
|
|
<a class="reference internal" href="#term-copying-garbage-collection"><em class="xref std std-term">copying</em></a>. See
|
|
<a class="reference internal" href="../topic/critical.html#topic-critical"><em>The critical path</em></a>.</p>
|
|
</div>
|
|
</dd>
|
|
<dt id="term-crossing-map">crossing map</dt>
|
|
<dd><p class="first">Where <a class="reference internal" href="m.html#term-memory-2"><em class="xref std std-term">memory<sup>(2)</sup></em></a> has already been divided into some
|
|
fixed-sized unit (for example, <a class="reference internal" href="p.html#term-page"><em class="xref std std-term">pages</em></a> or
|
|
<a class="reference internal" href="#term-card"><em class="xref std std-term">cards</em></a>), a crossing map records where
|
|
<a class="reference internal" href="o.html#term-object"><em class="xref std std-term">objects</em></a> lie across the boundaries of the
|
|
fixed-sized units. In other words, which fixed-sized units do
|
|
not start with the beginning of an object.</p>
|
|
<p>A system which implements <a class="reference internal" href="r.html#term-remembered-set"><em class="xref std std-term">remembered sets</em></a> by
|
|
<a class="reference internal" href="p.html#term-page-marking"><em class="xref std std-term">page marking</em></a> or <a class="reference internal" href="#term-card-marking"><em class="xref std std-term">card marking</em></a> needs to scan all
|
|
the <a class="reference internal" href="p.html#term-pointer"><em class="xref std std-term">pointers</em></a> in the page or card. If the system can
|
|
not <a class="reference internal" href="s.html#term-scan"><em class="xref std std-term">scan</em></a> partial objects (or requires information in
|
|
the object <a class="reference internal" href="i.html#term-in-band-header"><em class="xref std std-term">header</em></a> in order to scan a
|
|
partial object), a crossing map is necessary to find the
|
|
beginning of the first object in the unit.</p>
|
|
<div class="admonition-relevance-to-memory-management last admonition">
|
|
<p class="first admonition-title">Relevance to memory management</p>
|
|
<p class="last">In a sense, a crossing map is an optimization of
|
|
<a class="reference internal" href="t.html#term-tagged-architecture"><em class="xref std std-term">tagged architecture</em></a>. It represents the minimum
|
|
information necessary to determine how to interpret any
|
|
word of memory.</p>
|
|
</div>
|
|
</dd>
|
|
<dt id="term-cyclic-data-structure">cyclic data structure</dt>
|
|
<dd>A data structure is cyclic if some of its <a class="reference internal" href="r.html#term-reference"><em class="xref std std-term">references</em></a>
|
|
form a loop; that is, there’s an <a class="reference internal" href="o.html#term-object"><em class="xref std std-term">object</em></a> that can be
|
|
reached by following references from itself.</dd>
|
|
</dl>
|
|
</div>
|
|
|
|
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="sphinxsidebar">
|
|
<div class="sphinxsidebarwrapper">
|
|
<p class="logo"><a href="../index.html">
|
|
<img class="logo" src="../_static/logo.png" alt="Logo"/>
|
|
</a></p>
|
|
<h4>Previous topic</h4>
|
|
<p class="topless"><a href="b.html"
|
|
title="previous chapter">Memory Management Glossary: B</a></p>
|
|
<h4>Next topic</h4>
|
|
<p class="topless"><a href="d.html"
|
|
title="next chapter">Memory Management Glossary: D</a></p><h4>Downloads</h4>
|
|
|
|
<p class="topless">
|
|
<a href="http://www.ravenbrook.com/project/mps/release/1.111.0/">MPS Kit release 1.111.0</a><br>
|
|
<a href="http://www.ravenbrook.com/project/mps/release/">All MPS Kit releases</a>
|
|
</p>
|
|
|
|
<h4>Issues</h4>
|
|
|
|
<p class="topless">
|
|
<a href="http://www.ravenbrook.com/project/mps/issue/?action=list&view=status%3dopen&display=Job:Priority:Title&sort=Priority">Known issues</a><br>
|
|
<a href="http://www.ravenbrook.com/project/mps/issue/?action=fixed&release_fixed=1.111.0">Issues fixed in release 1.111.0</a>
|
|
</p><h4>Contact us</h4>
|
|
|
|
<p class="topless"><a href="mailto:mps-questions@ravenbrook.com">mps-questions@ravenbrook.com</a></p>
|
|
</div>
|
|
</div>
|
|
<div class="clearer"></div>
|
|
</div>
|
|
<div class="related">
|
|
<h3>Navigation</h3>
|
|
<ul>
|
|
<li class="right" style="margin-right: 10px">
|
|
<a href="../genindex.html" title="General Index"
|
|
>index</a></li>
|
|
<li class="right" >
|
|
<a href="d.html" title="Memory Management Glossary: D"
|
|
>next</a> |</li>
|
|
<li class="right" >
|
|
<a href="b.html" title="Memory Management Glossary: B"
|
|
>previous</a> |</li>
|
|
<li><a href="../index.html">Memory Pool System 1.111.0 documentation</a> »</li>
|
|
<li><a href="index.html" >Memory Management Glossary</a> »</li>
|
|
</ul>
|
|
</div>
|
|
<div class="footer">
|
|
© <a href="../copyright.html">Copyright</a> 2013, Ravenbrook Limited.
|
|
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.1.3.
|
|
</div>
|
|
</body>
|
|
</html> |