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

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 &mdash; Memory Pool System 1.111.0 documentation</title>
<link rel="stylesheet" href="../_static/mps.css" type="text/css" />
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
VERSION: '1.111.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true
};
</script>
<script type="text/javascript" src="../_static/jquery.js"></script>
<script type="text/javascript" src="../_static/underscore.js"></script>
<script type="text/javascript" src="../_static/doctools.js"></script>
<link rel="copyright" title="Copyright" href="../copyright.html" />
<link rel="top" title="Memory Pool System 1.111.0 documentation" href="../index.html" />
<link rel="up" title="Memory Management Glossary" href="index.html" />
<link rel="next" title="Memory Management Glossary: 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> &raquo;</li>
<li><a href="index.html" accesskey="U">Memory Management Glossary</a> &raquo;</li>
</ul>
</div>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body">
<div class="section" id="memory-management-glossary-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">&lt;=</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 &#8220;proxy&#8221; 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 &amp; 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 &#8220;free&#8221;.</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&amp;view=status%3dopen&amp;display=Job:Priority:Title&amp;sort=Priority">Known issues</a><br>
<a href="http://www.ravenbrook.com/project/mps/issue/?action=fixed&release_fixed=1.111.0">Issues fixed in release 1.111.0</a>
</p><h4>Contact us</h4>
<p class="topless"><a href="mailto:mps-questions@ravenbrook.com">mps-questions@ravenbrook.com</a></p>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="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> &raquo;</li>
<li><a href="index.html" >Memory Management Glossary</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; <a href="../copyright.html">Copyright</a> 2013, Ravenbrook Limited.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.1.3.
</div>
</body>
</html>