1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2026-01-13 06:50:39 -08:00
emacs/mps/manual/html/glossary/a.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

633 lines
No EOL
45 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!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: A &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: B" href="b.html" />
<link rel="prev" title="Memory Management Glossary" href="index.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="b.html" title="Memory Management Glossary: B"
accesskey="N">next</a> |</li>
<li class="right" >
<a href="index.html" title="Memory Management Glossary"
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-a">
<span id="glossary-a"></span><h1>Memory Management Glossary: A<a class="headerlink" href="#memory-management-glossary-a" title="Permalink to this headline"></a></h1>
<p class="glossary-alphabet"><a class="reference internal" href="#glossary-a"><em>A</em></a>
| <a class="reference internal" href="b.html#glossary-b"><em>B</em></a>
| <a class="reference internal" href="c.html#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-absolute-address">absolute address</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-physical-address"><em class="xref std std-term">physical address</em></a>.</p>
</div>
</dd>
<dt id="term-activation-frame">activation frame</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-activation-record"><em class="xref std std-term">activation record</em></a>.</p>
</div>
</dd>
<dt id="term-activation-record">activation record</dt>
<dd><div class="admonition-also-known-as first admonition">
<p class="first admonition-title">Also known as</p>
<p class="last"><em>function record</em>, <em>activation frame</em>.</p>
</div>
<p>An activation or function record is a data structure,
associated with the invocation of a function, procedure, or
control block that stores the variables, temporaries, and
fixed-sized data that are local to the block, and the
information required to return to the invoking context. It is
often stored on a <a class="reference internal" href="c.html#term-control-stack"><em class="xref std std-term">control stack</em></a>.</p>
<p>In a register-based hardware architecture, the current
activation record is typically partially stored in registers.</p>
<p><a class="reference internal" href="c.html#term-closure"><em class="xref std std-term">Closures</em></a> and <a class="reference internal" href="c.html#term-continuation"><em class="xref std std-term">continuations</em></a> are specializations
of activation records in support of particular language
features of <a class="reference internal" href="../mmref/lang.html#term-lisp"><em class="xref std std-term">LISP</em></a>, <a class="reference internal" href="../mmref/lang.html#term-scheme"><em class="xref std std-term">Scheme</em></a> and related
languages.</p>
<div class="admonition-relevance-to-memory-management admonition">
<p class="first admonition-title">Relevance to memory management</p>
<p class="last">The current activation record is part of the state of the
<a class="reference internal" href="m.html#term-mutator"><em class="xref std std-term">mutator</em></a>, and is therefore a <a class="reference internal" href="r.html#term-root"><em class="xref std std-term">root</em></a> to the
<a class="reference internal" href="c.html#term-collector-2"><em class="xref std std-term">collector<sup>(2)</sup></em></a>. In languages that permit recursion,
activation records have <a class="reference internal" href="d.html#term-dynamic-extent"><em class="xref std std-term">dynamic extent</em></a>. In
languages that permit closures or continuations,
activation records may have <a class="reference internal" href="i.html#term-indefinite-extent"><em class="xref std std-term">indefinite extent</em></a>.
Although they may not be visible to the programmer, their
<a class="reference internal" href="m.html#term-memory-1"><em class="xref std std-term">memory<sup>(1)</sup></em></a> must be managed by the
language run-time support. Because they are usually not
visible to the programmer, they may be a source of
inexplicable memory overhead.</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="s.html#term-stack-frame"><em class="xref std std-term">stack frame</em></a>.</p>
</div>
</dd>
<dt id="term-activation-stack">activation stack</dt>
<dd><div class="admonition-see first last admonition">
<p class="first admonition-title">See</p>
<p class="last"><a class="reference internal" href="c.html#term-control-stack"><em class="xref std std-term">control stack</em></a>.</p>
</div>
</dd>
<dt id="term-active">active</dt>
<dd><div class="admonition-see first last admonition">
<p class="first admonition-title">See</p>
<p class="last"><a class="reference internal" href="l.html#term-live"><em class="xref std std-term">live</em></a>.</p>
</div>
</dd>
<dt id="term-address">address</dt>
<dd><p class="first">An address is a specification of a <a class="reference internal" href="m.html#term-memory-location"><em class="xref std std-term">memory location</em></a> in
an <a class="reference internal" href="#term-address-space"><em class="xref std std-term">address space</em></a>.</p>
<p>An address is almost always represented as an unsigned integer
stored in a single <a class="reference internal" href="m.html#term-machine-word"><em class="xref std std-term">machine word</em></a>. The address is
decoded by the hardware in order to access a location on a
<a class="reference internal" href="p.html#term-physical-memory-2"><em class="xref std std-term">physical memory<sup>(2)</sup></em></a> device (such as a <a class="reference internal" href="r.html#term-ram"><em class="xref std std-term">RAM</em></a>) or
some <a class="reference internal" href="m.html#term-memory-mapping"><em class="xref std std-term">memory-mapped</em></a> resource.</p>
<div class="figure align-center">
<img alt="Diagram: A simplified view of addresses, address space, and locations on a 32-bit architecture." src="../_images/address.svg" /><p class="caption">A simplified view of addresses, address space, and
locations on a 32-bit architecture.</p>
</div>
<div class="admonition-similar-term admonition">
<p class="first admonition-title">Similar term</p>
<p class="last"><a class="reference internal" href="p.html#term-pointer"><em class="xref std std-term">pointer</em></a>.</p>
</div>
<div class="admonition-in-the-mps last admonition">
<p class="first admonition-title">In the MPS</p>
<p class="last">An address is represented by a value of the type
<a class="reference internal" href="../topic/interface.html#mps_addr_t" title="mps_addr_t"><tt class="xref c c-type docutils literal"><span class="pre">mps_addr_t</span></tt></a>.</p>
</div>
</dd>
<dt id="term-address-space">address space</dt>
<dd><p class="first">An <em>address space</em> is the set of possible <a class="reference internal" href="#term-address"><em class="xref std std-term">addresses</em></a>.
It can also be considered to be a partial function from
addresses to <a class="reference internal" href="m.html#term-memory-location"><em class="xref std std-term">locations</em></a>.</p>
<p>Typically, addresses start at zero and run to 2<sup>n</sup>1,
where <em>n</em> is the address width (for example, 15, 16, 24, 32,
64), which is usually the same as the width of the address
bus. This may not be true for <a class="reference internal" href="s.html#term-segmented-addressing"><em class="xref std std-term">segmented</em></a> architectures.</p>
<p>In modern systems, large parts of the whole address space may
be reserved by the operating system or architecture, or not
<a class="reference internal" href="m.html#term-mapped"><em class="xref std std-term">mapped</em></a> at any given time. The mapped part of the
address space may be discontiguous or sparse.</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="v.html#term-virtual-address-space"><em class="xref std std-term">virtual address space</em></a>, <a class="reference internal" href="p.html#term-physical-address-space"><em class="xref std std-term">physical address space</em></a>.</p>
</div>
</dd>
<dt id="term-address-translation-cache">address translation cache</dt>
<dd><div class="admonition-see first last admonition">
<p class="first admonition-title">See</p>
<p class="last"><a class="reference internal" href="t.html#term-translation-lookaside-buffer"><em class="xref std std-term">translation lookaside buffer</em></a>.</p>
</div>
</dd>
<dt id="term-address-ordered-first-fit">address-ordered first fit</dt>
<dd><p class="first">The <a class="reference internal" href="#term-allocation-policy"><em class="xref std std-term">allocation policy</em></a> that always uses the suitable
<a class="reference internal" href="f.html#term-free-block"><em class="xref std std-term">free block</em></a> with the lowest address. One of the most
common allocation policies in use. Commonly implemented by
<a class="reference internal" href="f.html#term-first-fit"><em class="xref std std-term">first fit</em></a> on a single address-ordered <a class="reference internal" href="f.html#term-free-block-chain"><em class="xref std std-term">free
block chain</em></a>. Sometimes just called &#8220;first fit&#8221;.</p>
<div class="admonition-see-also admonition seealso">
<p class="first admonition-title">See also</p>
<p class="last"><a class="reference internal" href="f.html#term-fifo-ordered-first-fit"><em class="xref std std-term">FIFO-ordered first fit</em></a>, <a class="reference internal" href="l.html#term-lifo-ordered-first-fit"><em class="xref std std-term">LIFO-ordered first fit</em></a>.</p>
</div>
<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#wil95"><em>Wilson et al. (1995)</em></a>.</p>
</div>
</dd>
<dt id="term-aging-space">aging space</dt>
<dd><p class="first">In some <a class="reference internal" href="g.html#term-generational-garbage-collection"><em class="xref std std-term">generational garbage collection</em></a> systems, 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 aging space is where
<a class="reference internal" href="o.html#term-object"><em class="xref std std-term">objects</em></a> which survive a <a class="reference internal" href="c.html#term-collection-cycle"><em class="xref std std-term">collection
cycle</em></a> stay until they are old enough to be <a class="reference internal" href="p.html#term-promotion"><em class="xref std std-term">promoted</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="c.html#term-creation-space"><em class="xref std std-term">creation space</em></a>.</p>
</div>
</dd>
<dt id="term-algebraic-data-type">algebraic data type</dt>
<dd><p class="first">Algebraic data types aggregate or alternate a number of
dissimilarly-typed objects. They are termed <em>algebraic</em>
because they can be expressed using the sum and product
operators, for example (a and b and c) or d.</p>
<p>Examples of algebraic data types include: structures, records,
tuples, and unions.</p>
<div class="admonition-relevance-to-memory-management admonition">
<p class="first admonition-title">Relevance to memory management</p>
<p class="last">Algebraic data types are usually represented using a
<a class="reference internal" href="h.html#term-heap"><em class="xref std std-term">heap</em></a>. Because of their non-uniformity, algebraic
data types are more difficult to <a class="reference internal" href="s.html#term-scan"><em class="xref std std-term">scan</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="s.html#term-scalar-data-type"><em class="xref std std-term">scalar data type</em></a>, <a class="reference internal" href="v.html#term-vector-data-type"><em class="xref std std-term">vector data type</em></a>, <a class="reference internal" href="h.html#term-heap"><em class="xref std std-term">heap</em></a>.</p>
</div>
</dd>
<dt id="term-alignment">alignment</dt>
<dd><p class="first">Alignment is a constraint on the <a class="reference internal" href="#term-address"><em class="xref std std-term">address</em></a> of an
<a class="reference internal" href="o.html#term-object"><em class="xref std std-term">object</em></a> in <a class="reference internal" href="m.html#term-memory-2"><em class="xref std std-term">memory<sup>(2)</sup></em></a>.</p>
<p>The constraint is usually that the object&#8217;s address must be a
multiple of a power of two, 2<sup>n</sup>, and therefore that
the least significant <em>n</em> bits of the address must be zero.</p>
<p>The bus hardware of many modern processors cannot access
multi-<a class="reference internal" href="b.html#term-byte-2"><em class="xref std std-term">byte<sup>(2)</sup></em></a> objects at any memory address. Often
<a class="reference internal" href="w.html#term-word"><em class="xref std std-term">word</em></a>-sized objects must be aligned to word boundaries,
double-words to double-word boundaries, double-floats to
8-byte boundaries, and so on. If a program attempts to access
an object that is incorrectly aligned, a <a class="reference internal" href="b.html#term-bus-error"><em class="xref std std-term">bus error</em></a>
occurs.</p>
<div class="admonition-relevance-to-memory-management admonition">
<p class="first admonition-title">Relevance to memory management</p>
<p class="last">A memory manager must take care to <a class="reference internal" href="#term-allocate"><em class="xref std std-term">allocate</em></a> memory
with an appropriate alignment for the object that is going
to be stored there. Implementations of <a class="reference internal" href="m.html#term-malloc"><em class="xref std std-term">malloc</em></a> have
to allocate all <a class="reference internal" href="b.html#term-block"><em class="xref std std-term">blocks</em></a> at the largest
alignment that the processor architecture requires. Other
reasons for aligning objects include using the least
significant bits of the address for a <a class="reference internal" href="t.html#term-tag"><em class="xref std std-term">tag</em></a>.</p>
</div>
<div class="admonition-opposite-term admonition">
<p class="first admonition-title">Opposite term</p>
<p class="last"><a class="reference internal" href="u.html#term-unaligned"><em class="xref std std-term">unaligned</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="n.html#term-natural-alignment"><em class="xref std std-term">natural alignment</em></a>.</p>
</div>
<div class="admonition-in-the-mps last admonition">
<p class="first admonition-title">In the MPS</p>
<p class="last">An alignment is represented by the unsigned integral type
<a class="reference internal" href="../topic/interface.html#mps_align_t" title="mps_align_t"><tt class="xref c c-type docutils literal"><span class="pre">mps_align_t</span></tt></a>. It must be a positive power of 2.</p>
</div>
</dd>
<dt id="term-alive">alive</dt>
<dd><div class="admonition-see first last admonition">
<p class="first admonition-title">See</p>
<p class="last"><a class="reference internal" href="l.html#term-live"><em class="xref std std-term">live</em></a>.</p>
</div>
</dd>
<dt id="term-allocate">allocate</dt>
<dd><div class="admonition-also-known-as first admonition">
<p class="first admonition-title">Also known as</p>
<p class="last"><em>cons</em>.</p>
</div>
<p><em>Allocation</em> is the process of assigning resources. When
requested to by the program, an application <a class="reference internal" href="m.html#term-memory-manager"><em class="xref std std-term">memory
manager</em></a> or <a class="reference internal" href="#term-allocator"><em class="xref std std-term">allocator</em></a> <em>allocates</em> a <a class="reference internal" href="b.html#term-block"><em class="xref std std-term">block</em></a> of
<a class="reference internal" href="m.html#term-memory-2"><em class="xref std std-term">memory<sup>(2)</sup></em></a> for the program to store its data in.
Allocation is also known as <em>consing</em>, from <a class="reference internal" href="c.html#term-cons-1"><em class="xref std std-term">cons<sup>(1)</sup></em></a>.</p>
<p>When faced with a request for memory from the program, a
memory manager must choose a suitable block and hand it over,
or fail. The choices made by the memory manager at this point
can have a significant effect on the future efficiency of the
program.</p>
<p>Allocation is rarely a simple issue. For example, programs
usually allocate <a class="reference internal" href="#term-activation-record"><em class="xref std std-term">activation records</em></a> (<a class="reference internal" href="#term-automatic-storage-duration"><em class="xref std std-term">automatic
variables</em></a>, and so on) for
functions from a processor <a class="reference internal" href="s.html#term-stack"><em class="xref std std-term">stack</em></a> simply by subtracting
a number from their stack <a class="reference internal" href="p.html#term-pointer"><em class="xref std std-term">pointer</em></a>. However, in a
<a class="reference internal" href="v.html#term-virtual-memory"><em class="xref std std-term">virtual memory</em></a> system, this may extend the stack onto
a previously unused <a class="reference internal" href="p.html#term-page"><em class="xref std std-term">page</em></a>, in which case the operating
system memory manager must carry out some quite complex
operations in order to supply the program with <a class="reference internal" href="b.html#term-backing-store"><em class="xref std std-term">backing
store</em></a> for the stack so that the program can continue.</p>
<div class="admonition-historical-note admonition">
<p class="first admonition-title">Historical note</p>
<p class="last">The term <em>reserved</em> was often used to mean &#8220;allocated&#8221;.</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-malloc"><em class="xref std std-term">malloc</em></a>.</p>
</div>
<div class="admonition-opposite-term admonition">
<p class="first admonition-title">Opposite term</p>
<p class="last"><a class="reference internal" href="f.html#term-free-1"><em class="xref std std-term">free<sup>(1)</sup></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="c.html#term-constructor-1"><em class="xref std std-term">constructor<sup>(1)</sup></em></a>.</p>
</div>
<div class="admonition-related-publication admonition">
<p class="first admonition-title">Related publication</p>
<p class="last"><a class="reference internal" href="../mmref/bib.html#wil95"><em>Wilson et al. (1995)</em></a>.</p>
</div>
<div class="admonition-in-the-mps last admonition">
<p class="first admonition-title">In the MPS</p>
<p class="last">See <a class="reference internal" href="../topic/allocation.html#topic-allocation"><em>Allocation</em></a>.</p>
</div>
</dd>
<dt id="term-allocation-frame">allocation frame</dt>
<dd><div class="admonition-in-the-mps first last admonition">
<p class="first admonition-title">In the MPS</p>
<p class="last">An allocation frame is a marker that can pushed onto an
<a class="reference internal" href="#term-allocation-point"><em class="xref std std-term">allocation point</em></a> by calling
<a class="reference internal" href="../topic/frame.html#mps_ap_frame_push" title="mps_ap_frame_push"><tt class="xref c c-func docutils literal"><span class="pre">mps_ap_frame_push()</span></tt></a>, and then popped by calling
<a class="reference internal" href="../topic/frame.html#mps_ap_frame_pop" title="mps_ap_frame_pop"><tt class="xref c c-func docutils literal"><span class="pre">mps_ap_frame_pop()</span></tt></a> to indicate that all blocks
allocated on the allocation point are <a class="reference internal" href="d.html#term-dead"><em class="xref std std-term">dead</em></a> (in the
case of <a class="reference internal" href="m.html#term-manual-memory-management"><em class="xref std std-term">manual</em></a> pools), or
very likely dead (in the case of <a class="reference internal" href="#term-automatic-memory-management"><em class="xref std std-term">automatic</em></a> pools). Allocation frames can
be used by the <a class="reference internal" href="c.html#term-client-program"><em class="xref std std-term">client program</em></a> to efficiently
implement stack-like patterns of allocation.</p>
</div>
</dd>
<dt id="term-allocation-mechanism">allocation mechanism</dt>
<dd><p class="first">The algorithm by which an <a class="reference internal" href="#term-allocator"><em class="xref std std-term">allocator</em></a> chooses a
<a class="reference internal" href="f.html#term-free-block"><em class="xref std std-term">free block</em></a> from which to satisfy an allocation
request. An allocation mechanism is the implementation of an
<a class="reference internal" href="#term-allocation-policy"><em class="xref std std-term">allocation policy</em></a>.</p>
<p>A common mechanism is &#8220;<a class="reference internal" href="f.html#term-first-fit"><em class="xref std std-term">first fit</em></a> on an address-ordered
<a class="reference internal" href="f.html#term-free-block-chain"><em class="xref std std-term">free block chain</em></a>, with eager <a class="reference internal" href="c.html#term-coalesce"><em class="xref std std-term">coalescing</em></a>&#8221;. This implements the <a class="reference internal" href="#term-address-ordered-first-fit"><em class="xref std std-term">address-ordered first
fit</em></a> policy, and commonly inherits that name, although there
are many other mechanisms for implementing that policy, for
example, &#8220;leftmost fit on a balanced tree of free blocks
ordered by address&#8221;.</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#wil95"><em>Wilson et al. (1995)</em></a>.</p>
</div>
</dd>
<dt id="term-allocation-pattern">allocation pattern</dt>
<dd><div class="admonition-in-the-mps first last admonition">
<p class="first admonition-title">In the MPS</p>
<p class="last">A hint to the MPS to expect a particular pattern of
allocation on an <a class="reference internal" href="#term-allocation-point"><em class="xref std std-term">allocation point</em></a>. The MPS may use
this hint to schedule its decisions as to when and what to
collect. See <a class="reference internal" href="../topic/pattern.html#topic-pattern"><em>Allocation patterns</em></a>.</p>
</div>
</dd>
<dt id="term-allocation-point">allocation point</dt>
<dd><div class="admonition-in-the-mps first last admonition">
<p class="first admonition-title">In the MPS</p>
<p class="last">An allocation point is an interface to a <a class="reference internal" href="p.html#term-pool"><em class="xref std std-term">pool</em></a>
which provides fast <a class="reference internal" href="b.html#term-buffer"><em class="xref std std-term">buffered</em></a> allocation, and
defers the need for synchronization in a multi-threaded
environment. Allocation points belong to the type
<a class="reference internal" href="../topic/allocation.html#mps_ap_t" title="mps_ap_t"><tt class="xref c c-type docutils literal"><span class="pre">mps_ap_t</span></tt></a>.</p>
</div>
</dd>
<dt id="term-allocation-point-protocol">allocation point protocol</dt>
<dd><div class="admonition-in-the-mps first last admonition">
<p class="first admonition-title">In the MPS</p>
<p class="last">The protocol that ensures safe inline allocation on an
<a class="reference internal" href="#term-allocation-point"><em class="xref std std-term">allocation point</em></a>. 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-allocation-policy">allocation policy</dt>
<dd><div class="admonition-also-known-as first admonition">
<p class="first admonition-title">Also known as</p>
<p class="last"><em>placement policy</em>.</p>
</div>
<p>The concrete policy used by an <a class="reference internal" href="#term-allocator"><em class="xref std std-term">allocator</em></a> for choosing
a <a class="reference internal" href="f.html#term-free-block"><em class="xref std std-term">free block</em></a> to satisfy an <a class="reference internal" href="#term-allocate"><em class="xref std std-term">allocation</em></a> request.</p>
<p>For instance, &#8220;always allocate from the largest free block&#8221;
(<a class="reference internal" href="w.html#term-worst-fit"><em class="xref std std-term">worst fit</em></a>) or &#8220;use the most recently freed block
suitable&#8221; (<a class="reference internal" href="l.html#term-lifo-ordered-first-fit"><em class="xref std std-term">LIFO-ordered first fit</em></a>).</p>
<p>Each allocation policy is motivated by an <a class="reference internal" href="#term-allocation-strategy"><em class="xref std std-term">allocation
strategy</em></a> and implemented by an <a class="reference internal" href="#term-allocation-mechanism"><em class="xref std std-term">allocation mechanism</em></a>.</p>
<div class="admonition-see-also admonition seealso">
<p class="first admonition-title">See also</p>
<p class="last"><a class="reference internal" href="#term-address-ordered-first-fit"><em class="xref std std-term">address-ordered first fit</em></a>, <a class="reference internal" href="b.html#term-best-fit"><em class="xref std std-term">best fit</em></a>.</p>
</div>
<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#wil95"><em>Wilson et al. (1995)</em></a>.</p>
</div>
</dd>
<dt id="term-allocation-strategy">allocation strategy</dt>
<dd><p class="first">The high-level design motivation or strategy, of an
<a class="reference internal" href="#term-allocator"><em class="xref std std-term">allocator</em></a>, which uses observations or theories about
patterns of allocation requests to justify an
<a class="reference internal" href="#term-allocation-policy"><em class="xref std std-term">allocation policy</em></a>.</p>
<p>For instance, &#8220;do not allow small long-lived <a class="reference internal" href="o.html#term-object"><em class="xref std std-term">objects</em></a>
to fragment large <a class="reference internal" href="f.html#term-free-3"><em class="xref std std-term">free<sup>(3)</sup></em></a> areas&#8221;, &#8220;allocate
consecutive objects close together&#8221;, and so on. The allocation
strategy motivates an <a class="reference internal" href="#term-allocation-policy"><em class="xref std std-term">allocation policy</em></a>, which is
implemented by an <a class="reference internal" href="#term-allocation-mechanism"><em class="xref std std-term">allocation mechanism</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#wil95"><em>Wilson et al. (1995)</em></a>.</p>
</div>
</dd>
<dt id="term-allocator">allocator</dt>
<dd><p class="first">The term <em>allocator</em> is often used to refer to the
<a class="reference internal" href="m.html#term-memory-manager"><em class="xref std std-term">memory manager</em></a>, usually when it is a simple manual
one.</p>
<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-memory-manager"><em class="xref std std-term">memory manager</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-allocate"><em class="xref std std-term">allocation</em></a>.</p>
</div>
</dd>
<dt id="term-ambiguous-reference">ambiguous reference</dt>
<dd><div class="admonition-also-known-as first admonition">
<p class="first admonition-title">Also known as</p>
<p class="last"><em>unsure reference</em>.</p>
</div>
<p>An ambiguous or unsure <a class="reference internal" href="r.html#term-reference"><em class="xref std std-term">reference</em></a> is a value that is
potentially a reference, but the <a class="reference internal" href="c.html#term-collector-1"><em class="xref std std-term">collector<sup>(1)</sup></em></a> cannot
prove that it is.</p>
<p>The presence of ambiguous references in a
<a class="reference internal" href="g.html#term-garbage-collection"><em class="xref std std-term">garbage-collected</em></a> system requires
the use of <a class="reference internal" href="c.html#term-conservative-garbage-collection"><em class="xref std std-term">conservative garbage collection</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="e.html#term-exact-reference"><em class="xref std std-term">exact reference</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="f.html#term-floating-garbage"><em class="xref std std-term">floating garbage</em></a>.</p>
</div>
</dd>
<dt id="term-ambiguous-root">ambiguous root</dt>
<dd><p class="first">An ambiguous root is a <a class="reference internal" href="r.html#term-root"><em class="xref std std-term">root</em></a> containing
<a class="reference internal" href="#term-ambiguous-reference"><em class="xref std std-term">ambiguous references</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="e.html#term-exact-root"><em class="xref std std-term">exact root</em></a>.</p>
</div>
<div class="admonition-in-the-mps last admonition">
<p class="first admonition-title">In the MPS</p>
<p class="last">An ambiguous root has <a class="reference internal" href="r.html#term-rank"><em class="xref std std-term">rank</em></a>
<a class="reference internal" href="../topic/root.html#mps_rank_ambig" title="mps_rank_ambig"><tt class="xref c c-func docutils literal"><span class="pre">mps_rank_ambig()</span></tt></a>.</p>
</div>
</dd>
<dt id="term-arena">arena</dt>
<dd><p class="first">The area of <a class="reference internal" href="m.html#term-memory-2"><em class="xref std std-term">memory<sup>(2)</sup></em></a> used by <a class="reference internal" href="m.html#term-malloc"><em class="xref std std-term">malloc</em></a> for
allocation.</p>
<p>So named from a semi-mythical &#8220;malloc: corrupted arena&#8221;
message supposedly emitted when some early versions became
terminally confused.</p>
<div class="admonition-see-also admonition seealso">
<p class="first admonition-title">See also</p>
<p class="last"><a class="reference internal" href="b.html#term-brk"><em class="xref std std-term">brk</em></a>.</p>
</div>
<div class="admonition-in-the-mps last admonition">
<p class="first admonition-title">In the MPS</p>
<p class="last">An arena is the data structure responsible for requesting
<a class="reference internal" href="m.html#term-memory-3"><em class="xref std std-term">memory<sup>(3)</sup></em></a> from the operating system, making it
available to <a class="reference internal" href="p.html#term-pool"><em class="xref std std-term">pools</em></a>, and for <a class="reference internal" href="g.html#term-garbage-collection"><em class="xref std std-term">garbage
collection</em></a>. Arenas belong to the type
<a class="reference internal" href="../topic/arena.html#mps_arena_t" title="mps_arena_t"><tt class="xref c c-type docutils literal"><span class="pre">mps_arena_t</span></tt></a>. See <a class="reference internal" href="../topic/arena.html#topic-arena"><em>Arenas</em></a>.</p>
</div>
</dd>
<dt id="term-arena-class">arena class</dt>
<dd><div class="admonition-in-the-mps first last admonition">
<p class="first admonition-title">In the MPS</p>
<p class="last">A value of type <a class="reference internal" href="../topic/arena.html#mps_arena_class_t" title="mps_arena_class_t"><tt class="xref c c-type docutils literal"><span class="pre">mps_arena_class_t</span></tt></a> describing a
class of <a class="reference internal" href="#term-arena"><em class="xref std std-term">arenas</em></a>. Arena classes include
<a class="reference internal" href="c.html#term-client-arena"><em class="xref std std-term">client arenas</em></a> and <a class="reference internal" href="v.html#term-virtual-memory-arena"><em class="xref std std-term">virtual memory arenas</em></a>.</p>
</div>
</dd>
<dt id="term-assertion">assertion</dt>
<dd><p class="first">A declaration in a program of a condition that is expected
always to be true, or which must be true in order for the
program to continue to execute correctly.</p>
<div class="admonition-in-the-mps last admonition">
<p class="first admonition-title">In the MPS</p>
<p class="last">Memory management mistakes often lead to
<a class="reference internal" href="o.html#term-overwriting-error"><em class="xref std std-term">overwriting errors</em></a> that
corrupt the data structures used by the memory manager to
maintain memory. Except in the <a class="reference internal" href="r.html#term-rash"><em class="xref std std-term">rash</em></a>
<a class="reference internal" href="v.html#term-variety"><em class="xref std std-term">variety</em></a>, most MPS functions assert the validity of
the data structures they operate on. This means that
memory management mistakes are detected as early as
possible, when there may still be enough evidence in the
<a class="reference internal" href="h.html#term-heap"><em class="xref std std-term">heap</em></a> to debug them. See <a class="reference internal" href="../topic/error.html#topic-error"><em>Error handing</em></a>.</p>
</div>
</dd>
<dt id="term-asynchronous-garbage-collector">asynchronous garbage collector</dt>
<dd><p class="first">A <a class="reference internal" href="c.html#term-collector-2"><em class="xref std std-term">collector<sup>(2)</sup></em></a> is asynchronous with respect to the
<a class="reference internal" href="m.html#term-mutator"><em class="xref std std-term">mutator</em></a> if it cannot be (easily) predicted when the
collector will run.</p>
<p>This means that the mutator must ensure that <a class="reference internal" href="f.html#term-formatted-object"><em class="xref std std-term">formatted
objects</em></a> are always <a class="reference internal" href="s.html#term-scan"><em class="xref std std-term">scannable</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="s.html#term-synchronous-garbage-collector"><em class="xref std std-term">synchronous garbage collector</em></a>.</p>
</div>
</dd>
<dt id="term-atc">ATC</dt>
<dd><div class="admonition-see first last admonition">
<p class="first admonition-title">See</p>
<p class="last"><a class="reference internal" href="t.html#term-translation-lookaside-buffer"><em class="xref std std-term">translation lookaside buffer</em></a>.</p>
</div>
</dd>
<dt id="term-atomic-object">atomic object</dt>
<dd><div class="admonition-see first last admonition">
<p class="first admonition-title">See</p>
<p class="last"><a class="reference internal" href="l.html#term-leaf-object"><em class="xref std std-term">leaf object</em></a>.</p>
</div>
</dd>
<dt id="term-automatic-memory-management">automatic memory management</dt>
<dd><p class="first">Automatic <a class="reference internal" href="m.html#term-memory-management"><em class="xref std std-term">memory management</em></a> is a general term for
techniques that automatically <a class="reference internal" href="r.html#term-recycle"><em class="xref std std-term">recycle</em></a> unused
<a class="reference internal" href="m.html#term-memory-2"><em class="xref std std-term">memory<sup>(2)</sup></em></a>.</p>
<p>It is not possible, in general, to automatically determine
which <a class="reference internal" href="o.html#term-object"><em class="xref std std-term">objects</em></a> are still <a class="reference internal" href="l.html#term-live"><em class="xref std std-term">live</em></a>. Even if
it didn&#8217;t depend on future input, there can be no general
algorithm to prove that an object is live (cf. the Halting
Problem). However, effective approximations are possible.</p>
<p>In <a class="reference internal" href="t.html#term-tracing-garbage-collection"><em class="xref std std-term">tracing garbage collection</em></a>, the approximation is
that an object can&#8217;t be live unless it is <a class="reference internal" href="r.html#term-reachable"><em class="xref std std-term">reachable</em></a>.
In <a class="reference internal" href="r.html#term-reference-counting"><em class="xref std std-term">reference counting</em></a>, the approximation is that an
object can&#8217;t be live unless it is <a class="reference internal" href="r.html#term-reference"><em class="xref std std-term">referenced</em></a>. Analysis
of the program text can reveal where objects <a class="reference internal" href="d.html#term-dead"><em class="xref std std-term">die</em></a>; A notable technique in this vein is <a class="reference internal" href="r.html#term-region-inference"><em class="xref std std-term">region
inference</em></a>.</p>
<p>Hybrid algorithms are also possible.</p>
<div class="admonition-similar-term admonition">
<p class="first admonition-title">Similar term</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>
<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-manual-memory-management"><em class="xref std std-term">manual memory management</em></a>.</p>
</div>
</dd>
<dt id="term-automatic-storage-duration">automatic storage duration</dt>
<dd><p class="first">In <a class="reference internal" href="../mmref/lang.html#term-c"><em class="xref std std-term">C</em></a>, <a class="reference internal" href="o.html#term-object"><em class="xref std std-term">objects</em></a> that are declared with
<em>automatic storage duration</em> are <a class="reference internal" href="l.html#term-live"><em class="xref std std-term">live</em></a> for the duration
of a block of code.</p>
<p>In most implementations of C, objects with automatic storage
duration are <a class="reference internal" href="#term-allocate"><em class="xref std std-term">allocated</em></a> on the <a class="reference internal" href="s.html#term-stack"><em class="xref std std-term">stack</em></a> when a
function is entered, and <a class="reference internal" href="f.html#term-free-1"><em class="xref std std-term">deallocated</em></a> when
it returns.</p>
<div class="admonition-similar-term admonition">
<p class="first admonition-title">Similar terms</p>
<p class="last"><a class="reference internal" href="s.html#term-stack-allocation"><em class="xref std std-term">stack allocation</em></a>, <a class="reference internal" href="d.html#term-dynamic-extent"><em class="xref std std-term">dynamic extent</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-static-storage-duration"><em class="xref std std-term">static storage duration</em></a>.</p>
</div>
</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="index.html"
title="previous chapter">Memory Management Glossary</a></p>
<h4>Next topic</h4>
<p class="topless"><a href="b.html"
title="next chapter">Memory Management Glossary: B</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="b.html" title="Memory Management Glossary: B"
>next</a> |</li>
<li class="right" >
<a href="index.html" title="Memory Management Glossary"
>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>