mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-01-13 06:50:39 -08:00
633 lines
No EOL
45 KiB
HTML
633 lines
No EOL
45 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: A — 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> »</li>
|
||
<li><a href="index.html" accesskey="U">Memory Management Glossary</a> »</li>
|
||
</ul>
|
||
</div>
|
||
|
||
<div class="document">
|
||
<div class="documentwrapper">
|
||
<div class="bodywrapper">
|
||
<div class="body">
|
||
|
||
<div class="section" id="memory-management-glossary-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 “first fit”.</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’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 “allocated”.</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 “<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>”. 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, “leftmost fit on a balanced tree of free blocks
|
||
ordered by address”.</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, “always allocate from the largest free block”
|
||
(<a class="reference internal" href="w.html#term-worst-fit"><em class="xref std std-term">worst fit</em></a>) or “use the most recently freed block
|
||
suitable” (<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, “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”, “allocate
|
||
consecutive objects close together”, 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 “malloc: corrupted arena”
|
||
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’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’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’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&view=status%3dopen&display=Job:Priority:Title&sort=Priority">Known issues</a><br>
|
||
<a href="http://www.ravenbrook.com/project/mps/issue/?action=fixed&release_fixed=1.111.0">Issues fixed in release 1.111.0</a>
|
||
</p><h4>Contact us</h4>
|
||
|
||
<p class="topless"><a href="mailto:mps-questions@ravenbrook.com">mps-questions@ravenbrook.com</a></p>
|
||
</div>
|
||
</div>
|
||
<div class="clearer"></div>
|
||
</div>
|
||
<div class="related">
|
||
<h3>Navigation</h3>
|
||
<ul>
|
||
<li class="right" style="margin-right: 10px">
|
||
<a href="../genindex.html" title="General Index"
|
||
>index</a></li>
|
||
<li class="right" >
|
||
<a href="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> »</li>
|
||
<li><a href="index.html" >Memory Management Glossary</a> »</li>
|
||
</ul>
|
||
</div>
|
||
<div class="footer">
|
||
© <a href="../copyright.html">Copyright</a> 2013, Ravenbrook Limited.
|
||
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.1.3.
|
||
</div>
|
||
</body>
|
||
</html> |