mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-01-13 06:50:39 -08:00
579 lines
No EOL
44 KiB
HTML
579 lines
No EOL
44 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: F — 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: G" href="g.html" />
|
|
<link rel="prev" title="Memory Management Glossary: E" href="e.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="g.html" title="Memory Management Glossary: G"
|
|
accesskey="N">next</a> |</li>
|
|
<li class="right" >
|
|
<a href="e.html" title="Memory Management Glossary: E"
|
|
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-f">
|
|
<span id="glossary-f"></span><h1>Memory Management Glossary: F<a class="headerlink" href="#memory-management-glossary-f" title="Permalink to this headline">¶</a></h1>
|
|
<p class="glossary-alphabet"><a class="reference internal" href="a.html#glossary-a"><em>A</em></a>
|
|
| <a class="reference internal" href="b.html#glossary-b"><em>B</em></a>
|
|
| <a class="reference internal" href="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="#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-fencepost"><span id="term-fence-post"></span>fencepost<br />fence post</dt>
|
|
<dd><p class="first">A fencepost is spare <a class="reference internal" href="m.html#term-memory-1"><em class="xref std std-term">memory<sup>(1)</sup></em></a> between
|
|
<a class="reference internal" href="a.html#term-allocate"><em class="xref std std-term">allocated</em></a> <a class="reference internal" href="b.html#term-block"><em class="xref std std-term">blocks</em></a> for checking purposes.</p>
|
|
<p>Some <a class="reference internal" href="m.html#term-memory-management"><em class="xref std std-term">memory management</em></a> systems leave spare memory
|
|
between allocated blocks and store special values in it. If a
|
|
checking routine finds that these memory <a class="reference internal" href="m.html#term-memory-location"><em class="xref std std-term">locations</em></a> have been modified, this probably indicates
|
|
an <a class="reference internal" href="o.html#term-overwriting-error"><em class="xref std std-term">overwriting error</em></a> in the application that was
|
|
allocated the adjacent block.</p>
|
|
<p>Such checking can help application programmers to find bugs
|
|
that would otherwise be difficult to reproduce and track down.</p>
|
|
<div class="admonition-similar-term last admonition">
|
|
<p class="first admonition-title">Similar term</p>
|
|
<p class="last"><a class="reference internal" href="i.html#term-in-band-header"><em class="xref std std-term">in-band header</em></a>.</p>
|
|
</div>
|
|
</dd>
|
|
<dt id="term-fencepost-error"><span id="term-fence-post-error"></span>fencepost error<br />fence post error</dt>
|
|
<dd><p class="first">The term <em>fencepost error</em> refers to errors arising from the
|
|
fact that, to enclose <em>n</em> consecutive intervals, you need
|
|
<em>n</em> + 1 end-points, from the number of posts required to
|
|
support fence rails.</p>
|
|
<p>An example of a fencepost error would be, in <a class="reference internal" href="../mmref/lang.html#term-c"><em class="xref std std-term">C</em></a>:</p>
|
|
<div class="highlight-c"><div class="highlight"><pre><span class="kt">void</span> <span class="nf">f</span><span class="p">(</span><span class="kt">void</span><span class="p">)</span>
|
|
<span class="p">{</span>
|
|
<span class="kt">int</span> <span class="n">i</span><span class="p">;</span>
|
|
<span class="kt">int</span> <span class="n">a</span><span class="p">[</span><span class="mi">10</span><span class="p">];</span>
|
|
<span class="k">for</span><span class="p">(</span><span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="n">i</span> <span class="o"><=</span> <span class="mi">10</span><span class="p">;</span> <span class="n">i</span><span class="o">++</span><span class="p">)</span>
|
|
<span class="n">a</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
|
|
<span class="p">}</span>
|
|
</pre></div>
|
|
</div>
|
|
<p class="last">because the declaration <tt class="docutils literal"><span class="pre">int</span> <span class="pre">a[10];</span></tt> creates an array of ten
|
|
integers, with indices from 0 to 9, but the <tt class="docutils literal"><span class="pre">for</span></tt> loop index
|
|
<tt class="docutils literal"><span class="pre">i</span></tt> runs from 0 to 10.</p>
|
|
</dd>
|
|
<dt id="term-fibonacci-buddies">Fibonacci buddies</dt>
|
|
<dd><p class="first">A common <a class="reference internal" href="b.html#term-buddy-system"><em class="xref std std-term">buddy system</em></a> <a class="reference internal" href="a.html#term-allocation-mechanism"><em class="xref std std-term">allocation mechanism</em></a>, in
|
|
which block sizes form a Fibonacci series (each block size is
|
|
the sum of the two previous sizes). Each block can therefore
|
|
be <a class="reference internal" href="s.html#term-split"><em class="xref std std-term">split</em></a> to form two blocks of valid sizes, and the
|
|
sizes are more closely spaced than in <a class="reference internal" href="b.html#term-binary-buddies"><em class="xref std std-term">binary buddies</em></a>.
|
|
However, if the same size is allocated repeatedly, performance
|
|
may suffer as the remainder blocks may have to be split again
|
|
(or become fragments).</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-buddy-system"><em class="xref std std-term">buddy system</em></a>, <a class="reference internal" href="a.html#term-allocation-mechanism"><em class="xref std std-term">allocation mechanism</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-fifo-ordered-first-fit">FIFO-ordered first fit</dt>
|
|
<dd><p class="first">The <a class="reference internal" href="a.html#term-allocation-policy"><em class="xref std std-term">allocation policy</em></a> that always uses the
|
|
least-recently <a class="reference internal" href="#term-free-1"><em class="xref std std-term">freed<sup>(1)</sup></em></a> suitable <a class="reference internal" href="#term-free-block"><em class="xref std std-term">free
|
|
block</em></a>. Commonly implemented by adding freed blocks to the end
|
|
of a <a class="reference internal" href="#term-free-block-chain"><em class="xref std std-term">free block chain</em></a>, and then using <a class="reference internal" href="#term-first-fit"><em class="xref std std-term">first
|
|
fit</em></a> allocation on this chain. <a class="reference internal" href="#term-free-1"><em class="xref std std-term">free<sup>(1)</sup></em></a> can be very
|
|
quick, depending on the <a class="reference internal" href="c.html#term-coalesce"><em class="xref std std-term">coalescing</em></a> policy.</p>
|
|
<p class="last">According to <a class="reference internal" href="../mmref/bib.html#wil95"><em>Wilson et al. (1995)</em></a>, this policy
|
|
controls fragmentation quite well, better than
|
|
<a class="reference internal" href="l.html#term-lifo-ordered-first-fit"><em class="xref std std-term">LIFO-ordered first fit</em></a> and as well as
|
|
<a class="reference internal" href="a.html#term-address-ordered-first-fit"><em class="xref std std-term">address-ordered first fit</em></a> in some cases, although
|
|
<a class="reference internal" href="l.html#term-locality-of-reference"><em class="xref std std-term">locality</em></a> may be worse.</p>
|
|
</dd>
|
|
<dt id="term-file-mapping">file mapping</dt>
|
|
<dd><div class="admonition-see first last admonition">
|
|
<p class="first admonition-title">See</p>
|
|
<p class="last"><a class="reference internal" href="m.html#term-memory-mapping"><em class="xref std std-term">memory mapping</em></a>.</p>
|
|
</div>
|
|
</dd>
|
|
<dt id="term-finalization">finalization</dt>
|
|
<dd><div class="admonition-also-known-as first admonition">
|
|
<p class="first admonition-title">Also known as</p>
|
|
<p class="last"><em>termination</em>.</p>
|
|
</div>
|
|
<p>In <a class="reference internal" href="g.html#term-garbage-collection"><em class="xref std std-term">garbage-collected</em></a> languages,
|
|
it is often necessary to perform actions on some
|
|
<a class="reference internal" href="o.html#term-object"><em class="xref std std-term">objects</em></a> after they are no longer in use and
|
|
before their <a class="reference internal" href="m.html#term-memory-2"><em class="xref std std-term">memory<sup>(2)</sup></em></a> can be <a class="reference internal" href="r.html#term-recycle"><em class="xref std std-term">recycled</em></a>. These actions are known as <em>finalization</em> or
|
|
<em>termination</em>.</p>
|
|
<p>A common use of finalization is to release resources when the
|
|
corresponding “proxy” object dies. For example, an open file
|
|
might be represented by a stream object. When this object has
|
|
been proven <a class="reference internal" href="d.html#term-dead"><em class="xref std std-term">dead</em></a> by the <a class="reference internal" href="c.html#term-collector-1"><em class="xref std std-term">collector<sup>(1)</sup></em></a>, it is
|
|
certain that the file is no longer in use by the program, and
|
|
it can and should be closed before the stream is recycled.</p>
|
|
<p>Note that finalization is not, in general, guaranteed to be
|
|
prompt, and this can cause problems if it is used to manage
|
|
scarce operating system resources such as file descriptors.</p>
|
|
<p>Many object-oriented languages provide support for
|
|
finalization, for example, Cedar, <a class="reference internal" href="../mmref/lang.html#term-java"><em class="xref std std-term">Java</em></a>, <a class="reference internal" href="../mmref/lang.html#term-perl"><em class="xref std std-term">Perl</em></a>
|
|
5, and <a class="reference internal" href="../mmref/lang.html#term-smalltalk"><em class="xref std std-term">Smalltalk</em></a>.</p>
|
|
<p>The term <em>finalization</em> is sometimes used to refer to the use
|
|
of <a class="reference internal" href="d.html#term-destructor-1"><em class="xref std std-term">destructors<sup>(1)</sup></em></a>, for example in Ada.</p>
|
|
<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/finalization.html#topic-finalization"><em>Finalization</em></a>.</p>
|
|
</div>
|
|
</dd>
|
|
<dt id="term-finalized-block">finalized block</dt>
|
|
<dd><div class="admonition-in-the-mps first last admonition">
|
|
<p class="first admonition-title">In the MPS</p>
|
|
<p class="last">A <a class="reference internal" href="b.html#term-block"><em class="xref std std-term">block</em></a> that has been registered for finalization
|
|
using <a class="reference internal" href="../topic/finalization.html#mps_finalize" title="mps_finalize"><tt class="xref c c-func docutils literal"><span class="pre">mps_finalize()</span></tt></a>, and which the MPS has
|
|
determined is <a class="reference internal" href="d.html#term-dead"><em class="xref std std-term">dead</em></a>, but whose finalization message
|
|
has not been discarded. See
|
|
<a class="reference internal" href="../topic/finalization.html#mps_message_type_finalization" title="mps_message_type_finalization"><tt class="xref c c-func docutils literal"><span class="pre">mps_message_type_finalization()</span></tt></a>.</p>
|
|
</div>
|
|
</dd>
|
|
<dt id="term-first-fit">first fit</dt>
|
|
<dd><p class="first">First fit is a <a class="reference internal" href="s.html#term-sequential-fit"><em class="xref std std-term">sequential fit</em></a> <a class="reference internal" href="a.html#term-allocation-mechanism"><em class="xref std std-term">allocation
|
|
mechanism</em></a>.</p>
|
|
<p>To quote <a class="reference internal" href="../mmref/bib.html#wil95"><em>Wilson et al. (1995)</em></a>:</p>
|
|
<blockquote>
|
|
<div>First fit simply searches the <a class="reference internal" href="#term-free-list"><em class="xref std std-term">free list</em></a> from the
|
|
beginning, and uses the first <a class="reference internal" href="#term-free-block"><em class="xref std std-term">free block</em></a> large
|
|
enough to satisfy the request. If the block is larger than
|
|
necessary, it is split and the remainder is put on the
|
|
free list.</div></blockquote>
|
|
<p>The first fit mechanism provides a class of first fit
|
|
<a class="reference internal" href="a.html#term-allocation-policy"><em class="xref std std-term">allocation policies</em></a>, depending on the order in which
|
|
the free list is stored. <a class="reference internal" href="a.html#term-address-ordered-first-fit"><em class="xref std std-term">Address-ordered first fit</em></a>
|
|
stores the list in order of (usually increasing) address.
|
|
<a class="reference internal" href="l.html#term-lifo-ordered-first-fit"><em class="xref std std-term">LIFO-ordered first fit</em></a> puts blocks on the front of the
|
|
free list when they are <a class="reference internal" href="#term-free-1"><em class="xref std std-term">freed<sup>(1)</sup></em></a>. <a class="reference internal" href="#term-fifo-ordered-first-fit"><em class="xref std std-term">FIFO-ordered
|
|
first fit</em></a> puts blocks on the end of the free list when they
|
|
are <a class="reference internal" href="#term-free-1"><em class="xref std std-term">freed<sup>(1)</sup></em></a>.</p>
|
|
<div class="admonition-see-also last admonition seealso">
|
|
<p class="first admonition-title">See also</p>
|
|
<p class="last"><a class="reference internal" href="a.html#term-address-ordered-first-fit"><em class="xref std std-term">address-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>, <a class="reference internal" href="#term-fifo-ordered-first-fit"><em class="xref std std-term">FIFO-ordered first fit</em></a>, <a class="reference internal" href="s.html#term-sequential-fit"><em class="xref std std-term">sequential fit</em></a>, <a class="reference internal" href="n.html#term-next-fit"><em class="xref std std-term">next fit</em></a>, <a class="reference internal" href="b.html#term-best-fit"><em class="xref std std-term">best fit</em></a>, <a class="reference internal" href="w.html#term-worst-fit"><em class="xref std std-term">worst fit</em></a>.</p>
|
|
</div>
|
|
</dd>
|
|
<dt id="term-fix">fix</dt>
|
|
<dd><div class="admonition-in-the-mps first last admonition">
|
|
<p class="first admonition-title">In the MPS</p>
|
|
<p class="last">To <em>fix</em> a <a class="reference internal" href="r.html#term-reference"><em class="xref std std-term">reference</em></a> from one <a class="reference internal" href="b.html#term-block"><em class="xref std std-term">block</em></a> to
|
|
another is to declare it to the MPS by calling
|
|
<a class="reference internal" href="../topic/scanning.html#MPS_FIX1" title="MPS_FIX1"><tt class="xref c c-func docutils literal"><span class="pre">MPS_FIX1()</span></tt></a> and <a class="reference internal" href="../topic/scanning.html#MPS_FIX2" title="MPS_FIX2"><tt class="xref c c-func docutils literal"><span class="pre">MPS_FIX2()</span></tt></a> within a
|
|
<a class="reference internal" href="s.html#term-scan-method"><em class="xref std std-term">scan method</em></a>. In a <a class="reference internal" href="m.html#term-moving-garbage-collector"><em class="xref std std-term">moving</em></a> <a class="reference internal" href="p.html#term-pool"><em class="xref std std-term">pool</em></a>, fixing a reference may also
|
|
update it to point to the new location of the block. See
|
|
<a class="reference internal" href="../topic/scanning.html#topic-scanning"><em>Scanning</em></a>.</p>
|
|
</div>
|
|
</dd>
|
|
<dt id="term-flip">flip</dt>
|
|
<dd><p class="first">The instant in a <a class="reference internal" href="t.html#term-two-space-collector"><em class="xref std std-term">two-space collector</em></a> when the roles of
|
|
the two <a class="reference internal" href="s.html#term-semi-space"><em class="xref std std-term">semi-spaces</em></a> are reversed. What
|
|
was the <a class="reference internal" href="t.html#term-tospace"><em class="xref std std-term">tospace</em></a> is now marked as <a class="reference internal" href="#term-fromspace"><em class="xref std std-term">fromspace</em></a> and
|
|
<a class="reference internal" href="c.html#term-condemned-set"><em class="xref std std-term">condemned</em></a>. What was the fromspace
|
|
becomes the site for all new <a class="reference internal" href="a.html#term-allocate"><em class="xref std std-term">allocations</em></a>. Also used in a more general sense to mean the
|
|
initiation of a new <a class="reference internal" href="c.html#term-collection-cycle"><em class="xref std std-term">collection cycle</em></a>.</p>
|
|
<div class="last figure align-center">
|
|
<img alt="Diagram: In a two-space collector, the *flip* occurs just before the fromspace is condemned and copying starts." src="../_images/two-space.svg" /><p class="caption">In a two-space collector, the <em>flip</em> occurs just before the
|
|
fromspace is condemned and copying starts.</p>
|
|
</div>
|
|
</dd>
|
|
<dt id="term-floating-garbage">floating garbage</dt>
|
|
<dd><p class="first">Floating garbage is <a class="reference internal" href="g.html#term-garbage"><em class="xref std std-term">garbage</em></a> that is not
|
|
<a class="reference internal" href="r.html#term-recycle"><em class="xref std std-term">recycled</em></a> promptly due to some approximation
|
|
or optimization in the <a class="reference internal" href="g.html#term-garbage-collector"><em class="xref std std-term">garbage collector</em></a>.</p>
|
|
<p>Floating garbage results from conservatively estimating an
|
|
<a class="reference internal" href="o.html#term-object"><em class="xref std std-term">object</em></a> that is really <a class="reference internal" href="u.html#term-unreachable"><em class="xref std std-term">unreachable</em></a> to be
|
|
<a class="reference internal" href="r.html#term-reachable"><em class="xref std std-term">reachable</em></a> for the purposes of a particular
|
|
<a class="reference internal" href="c.html#term-collection-cycle"><em class="xref std std-term">collection cycle</em></a>. Using estimates can have
|
|
considerable performance benefits but also result in higher
|
|
<a class="reference internal" href="m.html#term-memory-2"><em class="xref std std-term">memory<sup>(2)</sup></em></a> consumption.</p>
|
|
<p>Typical estimates that cause floating garbage are:</p>
|
|
<ol class="arabic simple">
|
|
<li>Every register or <a class="reference internal" href="a.html#term-activation-frame"><em class="xref std std-term">activation frame</em></a> slot holds a
|
|
reachable value: this is not always true, as objects stored
|
|
in dead registers or slots may be otherwise unreachable.
|
|
This estimate can simplify the compiler as well as the
|
|
interface between the compiler and the garbage collector.</li>
|
|
<li>Every object in a <a class="reference internal" href="r.html#term-remembered-set"><em class="xref std std-term">remembered set</em></a> is reachable: this
|
|
is not always true, because remembered objects can have
|
|
become unreachable since they were added to the remembered
|
|
set. This estimate allows remembered sets to be effective;
|
|
the alternative—determining whether each remembered object
|
|
is reachable—is equivalent to a full garbage collection.</li>
|
|
<li>Anything that looks like a <a class="reference internal" href="r.html#term-reference"><em class="xref std std-term">reference</em></a> is one: this
|
|
is not generally true, because random data can have the
|
|
same bit pattern as a pointer. <a class="reference internal" href="c.html#term-conservative-garbage-collection"><em class="xref std std-term">Conservative garbage
|
|
collectors</em></a> use this
|
|
estimate.</li>
|
|
<li>Any object referenced from another is reachable: this is
|
|
not generally true, because garbage can reference other
|
|
garbage. <a class="reference internal" href="r.html#term-reference-counting"><em class="xref std std-term">Reference counting</em></a> collectors use this
|
|
estimate, resulting in their not being able to reclaim
|
|
self-referential structures.</li>
|
|
<li>Any object reached during collection remains live until the
|
|
next collection: this may not be true when the garbage
|
|
collector runs interleaved with the mutator, as do
|
|
<a class="reference internal" href="i.html#term-incremental-garbage-collection"><em class="xref std std-term">incremental</em></a> and
|
|
<a class="reference internal" href="p.html#term-parallel-garbage-collection"><em class="xref std std-term">concurrent</em></a>
|
|
collectors.</li>
|
|
</ol>
|
|
<p class="last">A more subtle kind of floating garbage is an unreachable data
|
|
structure that spans multiple regions that are never
|
|
<a class="reference internal" href="c.html#term-condemned-set"><em class="xref std std-term">condemned</em></a> together.</p>
|
|
</dd>
|
|
<dt id="term-foreign-code">foreign code</dt>
|
|
<dd><div class="admonition-in-the-mps first last admonition">
|
|
<p class="first admonition-title">In the MPS</p>
|
|
<p>From the point of view of the <a class="reference internal" href="c.html#term-client-program"><em class="xref std std-term">client program</em></a>,
|
|
<em>foreign code</em> is external code (not part of the client
|
|
program, or the MPS), which is not aware of and does not
|
|
co-operate with the MPS. The client program must take care
|
|
when passing the address of a block in a <a class="reference internal" href="m.html#term-moving-memory-manager"><em class="xref std std-term">moving</em></a> <a class="reference internal" href="p.html#term-pool"><em class="xref std std-term">pool</em></a> to foreign code.</p>
|
|
<p class="last">The <a class="reference internal" href="../pool/lo.html#pool-lo"><em>LO (Leaf Object)</em></a> <a class="reference internal" href="p.html#term-pool-class"><em class="xref std std-term">pool class</em></a> is designed for this
|
|
use case: blocks allocated from this pool do not move and
|
|
are never protected, and so may be passed safely to
|
|
foreign code.</p>
|
|
</div>
|
|
</dd>
|
|
<dt id="term-format">format</dt>
|
|
<dd><p class="first">A format describes the representation of an <a class="reference internal" href="o.html#term-object"><em class="xref std std-term">object</em></a>;
|
|
that is, how the object is laid out in memory.</p>
|
|
<p>A format usually specifies where the fields of the objects are
|
|
located and what their type is.</p>
|
|
<div class="admonition-relevance-to-memory-management admonition">
|
|
<p class="first admonition-title">Relevance to memory management</p>
|
|
<p class="last">If formats are provided by a language or the application
|
|
program, <a class="reference internal" href="e.html#term-exact-garbage-collection"><em class="xref std std-term">exact garbage collection</em></a> can be used,
|
|
because the <a class="reference internal" href="c.html#term-collector-1"><em class="xref std std-term">collector<sup>(1)</sup></em></a> can determine which
|
|
fields are <a class="reference internal" href="r.html#term-reference"><em class="xref std std-term">references</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="c.html#term-conservative-garbage-collection"><em class="xref std std-term">conservative garbage collection</em></a>.</p>
|
|
</div>
|
|
</dd>
|
|
<dt id="term-format-method">format method</dt>
|
|
<dd><div class="admonition-in-the-mps first last admonition">
|
|
<p class="first admonition-title">In the MPS</p>
|
|
<p class="last">One of the methods in an <a class="reference internal" href="o.html#term-object-format"><em class="xref std std-term">object format</em></a>, defined by
|
|
the <a class="reference internal" href="c.html#term-client-program"><em class="xref std std-term">client program</em></a> in order to describe its
|
|
objects to the MPS. May be a <a class="reference internal" href="s.html#term-scan-method"><em class="xref std std-term">scan method</em></a>,
|
|
<a class="reference internal" href="s.html#term-skip-method"><em class="xref std std-term">skip method</em></a>, <a class="reference internal" href="#term-forward-method"><em class="xref std std-term">forward method</em></a>,
|
|
<a class="reference internal" href="i.html#term-is-forwarded-method"><em class="xref std std-term">is-forwarded method</em></a>, or <a class="reference internal" href="p.html#term-padding-method"><em class="xref std std-term">padding method</em></a>.</p>
|
|
</div>
|
|
</dd>
|
|
<dt id="term-formatted-object">formatted object</dt>
|
|
<dd><div class="admonition-in-the-mps first last admonition">
|
|
<p class="first admonition-title">In the MPS</p>
|
|
<p class="last">An allocated <a class="reference internal" href="b.html#term-block"><em class="xref std std-term">block</em></a> that belongs to an
|
|
<a class="reference internal" href="o.html#term-object-format"><em class="xref std std-term">object format</em></a> and may be <a class="reference internal" href="s.html#term-scan"><em class="xref std std-term">scanned</em></a> by
|
|
the <a class="reference internal" href="g.html#term-garbage-collector"><em class="xref std std-term">garbage collector</em></a>. See <a class="reference internal" href="../topic/format.html#topic-format"><em>Object formats</em></a>.</p>
|
|
</div>
|
|
</dd>
|
|
<dt id="term-forward-method">forward method</dt>
|
|
<dd><div class="admonition-in-the-mps first last admonition">
|
|
<p class="first admonition-title">In the MPS</p>
|
|
<p class="last">A <a class="reference internal" href="#term-format-method"><em class="xref std std-term">format method</em></a> that is called by a <a class="reference internal" href="m.html#term-moving-garbage-collector"><em class="xref std std-term">moving</em></a> <a class="reference internal" href="p.html#term-pool"><em class="xref std std-term">pool</em></a> when it
|
|
has moved an object. The forward method replaces the old
|
|
object with a <a class="reference internal" href="#term-forwarding-marker"><em class="xref std std-term">forwarding marker</em></a> that points to the
|
|
new location of the object. See <a class="reference internal" href="../topic/format.html#mps_fmt_fwd_t" title="mps_fmt_fwd_t"><tt class="xref c c-type docutils literal"><span class="pre">mps_fmt_fwd_t</span></tt></a>.</p>
|
|
</div>
|
|
</dd>
|
|
<dt id="term-forwarding-marker"><span id="term-forwarding-object"></span><span id="term-forwarding-pointer"></span>forwarding marker<br />forwarding object<br />forwarding pointer</dt>
|
|
<dd><p class="first">Some <a class="reference internal" href="g.html#term-garbage-collector"><em class="xref std std-term">garbage collectors</em></a>
|
|
<a class="reference internal" href="m.html#term-moving-garbage-collector"><em class="xref std std-term">move</em></a> <a class="reference internal" href="r.html#term-reachable"><em class="xref std std-term">reachable</em></a>
|
|
<a class="reference internal" href="o.html#term-object"><em class="xref std std-term">objects</em></a> into another space. They leave a
|
|
forwarding pointer, a special <a class="reference internal" href="r.html#term-reference"><em class="xref std std-term">reference</em></a> pointing to
|
|
the new <a class="reference internal" href="m.html#term-memory-location"><em class="xref std std-term">location</em></a>, in the old
|
|
location.</p>
|
|
<div class="admonition-similar-term admonition">
|
|
<p class="first admonition-title">Similar term</p>
|
|
<p class="last"><a class="reference internal" href="b.html#term-broken-heart"><em class="xref std std-term">broken heart</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-copying-garbage-collection"><em class="xref std std-term">copying garbage collection</em></a>, <a class="reference internal" href="t.html#term-two-space-collector"><em class="xref std std-term">two-space collector</em></a>.</p>
|
|
</div>
|
|
<div class="admonition-in-the-mps last admonition">
|
|
<p class="first admonition-title">In the MPS</p>
|
|
<p class="last">The term <em>forwarding object</em> is used. This is a
|
|
<a class="reference internal" href="#term-formatted-object"><em class="xref std std-term">formatted object</em></a> that has been replaced by a
|
|
<a class="reference internal" href="#term-forwarding-marker"><em class="xref std std-term">forwarding marker</em></a>. One of three types of formatted
|
|
objects, the other two being <a class="reference internal" href="c.html#term-client-object"><em class="xref std std-term">client objects</em></a> and
|
|
<a class="reference internal" href="p.html#term-padding-object"><em class="xref std std-term">padding objects</em></a>.</p>
|
|
</div>
|
|
</dd>
|
|
<dt id="term-fragmentation">fragmentation</dt>
|
|
<dd><p class="first">Fragmentation is the inability to use <a class="reference internal" href="m.html#term-memory-1"><em class="xref std std-term">memory<sup>(1)</sup></em></a>
|
|
because of the arrangement of memory already in use. It is
|
|
usually divided into <a class="reference internal" href="e.html#term-external-fragmentation"><em class="xref std std-term">external fragmentation</em></a> and
|
|
<a class="reference internal" href="i.html#term-internal-fragmentation"><em class="xref std std-term">internal fragmentation</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#jw98"><em>Johnstone & Wilson (1998)</em></a>.</p>
|
|
</div>
|
|
</dd>
|
|
<dt id="term-frame">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="i.html#term-in-band-header"><em class="xref std std-term">in-band header</em></a>.</p>
|
|
</div>
|
|
</dd>
|
|
<dt id="term-free-1">free<sup>(1)</sup></dt>
|
|
<dd><div class="admonition-also-known-as first admonition">
|
|
<p class="first admonition-title">Also known as</p>
|
|
<p class="last"><em>deallocate</em>.</p>
|
|
</div>
|
|
<p>In <a class="reference internal" href="m.html#term-manual-memory-management"><em class="xref std std-term">manual memory management</em></a>, to free or deallocate an
|
|
<a class="reference internal" href="o.html#term-object"><em class="xref std std-term">object</em></a> is to tell the <a class="reference internal" href="m.html#term-memory-manager"><em class="xref std std-term">memory manager</em></a> that it
|
|
is no longer needed. The <a class="reference internal" href="m.html#term-memory-1"><em class="xref std std-term">memory<sup>(1)</sup></em></a> may then be
|
|
<a class="reference internal" href="r.html#term-recycle"><em class="xref std std-term">recycled</em></a> by being used for subsequent
|
|
<a class="reference internal" href="a.html#term-allocate"><em class="xref std std-term">allocation</em></a>, or by being returned to the
|
|
operating system.</p>
|
|
<div class="admonition-opposite-term admonition">
|
|
<p class="first admonition-title">Opposite term</p>
|
|
<p class="last"><a class="reference internal" href="a.html#term-allocate"><em class="xref std std-term">allocate</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-free-2"><em class="xref std std-term">free<sup>(2)</sup></em></a>, <a class="reference internal" href="d.html#term-destructor-1"><em class="xref std std-term">destructor<sup>(1)</sup></em></a>.</p>
|
|
</div>
|
|
</dd>
|
|
<dt id="term-free-2">free<sup>(2)</sup></dt>
|
|
<dd>In <a class="reference internal" href="../mmref/lang.html#term-c"><em class="xref std std-term">C</em></a>, the system function used for explicit
|
|
<a class="reference internal" href="#term-free-1"><em class="xref std std-term">deallocation</em></a> is called <tt class="docutils literal"><span class="pre">free</span></tt>.</dd>
|
|
<dt id="term-free-3">free<sup>(3)</sup></dt>
|
|
<dd><p class="first"><a class="reference internal" href="m.html#term-memory-2"><em class="xref std std-term">Memory<sup>(2)</sup></em></a> is <em>free</em> if it is not currently
|
|
<a class="reference internal" href="a.html#term-allocate"><em class="xref std std-term">allocated</em></a>.</p>
|
|
<div class="admonition-historical-note admonition">
|
|
<p class="first admonition-title">Historical note</p>
|
|
<p class="last">The term <em>available</em> was commonly used to mean “free”.</p>
|
|
</div>
|
|
<div class="admonition-opposite-term admonition">
|
|
<p class="first admonition-title">Opposite term</p>
|
|
<p class="last"><a class="reference internal" href="a.html#term-allocate"><em class="xref std std-term">allocated</em></a>.</p>
|
|
</div>
|
|
<div class="admonition-see-also last admonition seealso">
|
|
<p class="first admonition-title">See also</p>
|
|
<p class="last"><a class="reference internal" href="#term-free-1"><em class="xref std std-term">free<sup>(1)</sup></em></a>.</p>
|
|
</div>
|
|
</dd>
|
|
<dt id="term-free-4">free<sup>(4)</sup></dt>
|
|
<dd><div class="admonition-see first last admonition">
|
|
<p class="first admonition-title">See</p>
|
|
<p class="last"><a class="reference internal" href="u.html#term-unmapped"><em class="xref std std-term">unmapped</em></a>.</p>
|
|
</div>
|
|
</dd>
|
|
<dt id="term-free-block">free block</dt>
|
|
<dd><p class="first">A single contiguous area of <a class="reference internal" href="m.html#term-memory-2"><em class="xref std std-term">memory<sup>(2)</sup></em></a> available to
|
|
satisfy an <a class="reference internal" href="a.html#term-allocate"><em class="xref std std-term">allocation</em></a> request.</p>
|
|
<p>For the purpose of discussing <a class="reference internal" href="a.html#term-allocation-mechanism"><em class="xref std std-term">allocation mechanisms</em></a>,
|
|
two adjacent free blocks are not considered to be a single
|
|
free block, until they are <a class="reference internal" href="c.html#term-coalesce"><em class="xref std std-term">coalesced</em></a>. Free blocks may
|
|
be <a class="reference internal" href="s.html#term-split"><em class="xref std std-term">split</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="a.html#term-allocation-mechanism"><em class="xref std std-term">allocation mechanism</em></a>, <a class="reference internal" href="#term-free-list"><em class="xref std std-term">free list</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-free-block-chain">free block chain</dt>
|
|
<dd><p class="first">Some systems store the <a class="reference internal" href="#term-free-list"><em class="xref std std-term">free list</em></a> as a linked list, or
|
|
chain.</p>
|
|
<p>Usually the links are stored within the <a class="reference internal" href="#term-free-3"><em class="xref std std-term">free<sup>(3)</sup></em></a>
|
|
<a class="reference internal" href="b.html#term-block"><em class="xref std std-term">blocks</em></a>. This means that all <a class="reference internal" href="a.html#term-allocate"><em class="xref std std-term">allocated</em></a> blocks
|
|
must be large enough to store these, and implies a minimum
|
|
size.</p>
|
|
<p>Sometimes, the free block chain is ordered by <a class="reference internal" href="a.html#term-address"><em class="xref std std-term">address</em></a>.
|
|
This makes <a class="reference internal" href="c.html#term-coalesce"><em class="xref std std-term">coalescence</em></a> considerably
|
|
cheaper, but <a class="reference internal" href="#term-free-1"><em class="xref std std-term">deallocation</em></a> more expensive.</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="#term-free-list"><em class="xref std std-term">free list</em></a>.</p>
|
|
</div>
|
|
</dd>
|
|
<dt id="term-free-list">free list</dt>
|
|
<dd><p class="first">The free list is the set of <a class="reference internal" href="#term-free-block"><em class="xref std std-term">free blocks</em></a>.</p>
|
|
<p>Originally this term meant the single linked list of all free
|
|
blocks, but as <a class="reference internal" href="a.html#term-allocation-mechanism"><em class="xref std std-term">allocation mechanisms</em></a> have become more
|
|
varied, it has become more generic, and now may be implemented
|
|
as a tree or other data structure rather than a linked list.
|
|
If the implementation actually is a linked list of free
|
|
blocks, this is called a <a class="reference internal" href="#term-free-block-chain"><em class="xref std std-term">free block chain</em></a> to
|
|
distinguish it from the abstract term.</p>
|
|
<p>There may be several free lists, classed by size or other
|
|
characteristic. For instance, <a class="reference internal" href="s.html#term-segregated-free-list"><em class="xref std std-term">segregated free list</em></a>
|
|
systems classify free lists by block size.</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="#term-free-block"><em class="xref std std-term">free block</em></a>, <a class="reference internal" href="#term-free-block-chain"><em class="xref std std-term">free block chain</em></a>.</p>
|
|
</div>
|
|
</dd>
|
|
<dt id="term-free-store">free store</dt>
|
|
<dd><div class="admonition-see first last admonition">
|
|
<p class="first admonition-title">See</p>
|
|
<p class="last"><a class="reference internal" href="h.html#term-heap"><em class="xref std std-term">heap</em></a>.</p>
|
|
</div>
|
|
</dd>
|
|
<dt id="term-freestore">freestore</dt>
|
|
<dd><div class="admonition-see first last admonition">
|
|
<p class="first admonition-title">See</p>
|
|
<p class="last"><a class="reference internal" href="h.html#term-heap"><em class="xref std std-term">heap</em></a>.</p>
|
|
</div>
|
|
</dd>
|
|
<dt id="term-from-space"><span id="term-fromspace"></span>from space<br />fromspace</dt>
|
|
<dd><div class="admonition-also-known-as first admonition">
|
|
<p class="first admonition-title">Also known as</p>
|
|
<p class="last"><em>old space</em>, <em>oldspace</em>.</p>
|
|
</div>
|
|
<p>In <a class="reference internal" href="c.html#term-copying-garbage-collection"><em class="xref std std-term">copying garbage collection</em></a>, the space containing a
|
|
mixture of <a class="reference internal" href="l.html#term-live"><em class="xref std std-term">live</em></a> and <a class="reference internal" href="d.html#term-dead"><em class="xref std std-term">dead</em></a> objects, out of which
|
|
the former are copied.</p>
|
|
<div class="admonition-opposite-term last admonition">
|
|
<p class="first admonition-title">Opposite term</p>
|
|
<p class="last"><a class="reference internal" href="t.html#term-tospace"><em class="xref std std-term">tospace</em></a>.</p>
|
|
</div>
|
|
</dd>
|
|
<dt id="term-function-pointer">function pointer</dt>
|
|
<dd><p class="first">In the <a class="reference internal" href="../mmref/lang.html#term-c"><em class="xref std std-term">C</em></a> programming language, a <a class="reference internal" href="p.html#term-pointer"><em class="xref std std-term">pointer</em></a> to an
|
|
function, as distinct from a <a class="reference internal" href="o.html#term-object-pointer"><em class="xref std std-term">object pointer</em></a>. The C
|
|
programming language does not guarantee that function and
|
|
object pointers are the same size, or that a pointer of one
|
|
type can be cast to a pointer of the the other type without
|
|
losing information (but on every mainstream C implementation,
|
|
including all those supported by the MPS, they are in fact the
|
|
same).</p>
|
|
<div class="admonition-opposite-term last admonition">
|
|
<p class="first admonition-title">Opposite term</p>
|
|
<p class="last"><a class="reference internal" href="o.html#term-object-pointer"><em class="xref std std-term">object pointer</em></a>.</p>
|
|
</div>
|
|
</dd>
|
|
<dt id="term-function-record">function record</dt>
|
|
<dd><div class="admonition-see first last admonition">
|
|
<p class="first admonition-title">See</p>
|
|
<p class="last"><a class="reference internal" href="a.html#term-activation-record"><em class="xref std std-term">activation record</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="e.html"
|
|
title="previous chapter">Memory Management Glossary: E</a></p>
|
|
<h4>Next topic</h4>
|
|
<p class="topless"><a href="g.html"
|
|
title="next chapter">Memory Management Glossary: G</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="g.html" title="Memory Management Glossary: G"
|
|
>next</a> |</li>
|
|
<li class="right" >
|
|
<a href="e.html" title="Memory Management Glossary: E"
|
|
>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> |