1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2026-01-13 23:10:26 -08:00
emacs/mps/manual/html/glossary/c.html
Gareth Rees 06057a4d52 Bring html up to date.
Copied from Perforce
 Change: 181168
 ServerID: perforce.ravenbrook.com
2013-03-18 15:13:54 +00:00

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 &mdash; 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> &raquo;</li>
<li><a href="index.html" accesskey="U">Memory Management Glossary</a> &raquo;</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&#8217;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. &#8220;Level 1
cache&#8221; is the fastest, smallest <a class="reference internal" href="s.html#term-storage-level"><em class="xref std std-term">storage level</em></a>, &#8220;level
2&#8221; 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&#8217;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 &#8220;look-ahead cache&#8221; 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 &amp; 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 &#8220;CONStruct&#8221;). 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&#8217;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&#8217;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&#8217;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&#8217;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 &amp; 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&#8217;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&amp;view=status%3dopen&amp;display=Job:Priority:Title&amp;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> &raquo;</li>
<li><a href="index.html" >Memory Management Glossary</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; <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>