mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-01-13 23:10:26 -08:00
573 lines
No EOL
42 KiB
HTML
573 lines
No EOL
42 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: B — 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: C" href="c.html" />
|
|
<link rel="prev" title="Memory Management Glossary: A" href="a.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="c.html" title="Memory Management Glossary: C"
|
|
accesskey="N">next</a> |</li>
|
|
<li class="right" >
|
|
<a href="a.html" title="Memory Management Glossary: A"
|
|
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-b">
|
|
<span id="glossary-b"></span><h1>Memory Management Glossary: B<a class="headerlink" href="#memory-management-glossary-b" 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="#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-backing-store">backing store</dt>
|
|
<dd><p class="first">Backing <a class="reference internal" href="s.html#term-store-2"><em class="xref std std-term">store<sup>(2)</sup></em></a> is typically part of a hard disk
|
|
that is used by a <a class="reference internal" href="p.html#term-paging"><em class="xref std std-term">paging</em></a> or <a class="reference internal" href="s.html#term-swapping"><em class="xref std std-term">swapping</em></a> system to
|
|
store information not currently in <a class="reference internal" href="m.html#term-main-memory"><em class="xref std std-term">main memory</em></a>.
|
|
Backing store is slower and cheaper than main memory.</p>
|
|
<p>Other <a class="reference internal" href="m.html#term-memory-1"><em class="xref std std-term">storage</em></a> may, less commonly, be used
|
|
in place of a hard disk (for instance, magnetic tape, floppy
|
|
disk, or historically, magnetic drum).</p>
|
|
<p>In general, backing store may mean any locations used to store
|
|
information when its preferred or natural location is
|
|
otherwise being used: for example, memory used by a graphical
|
|
interface to keep a copy of the contents of obscured windows.</p>
|
|
<div class="admonition-similar-term last admonition">
|
|
<p class="first admonition-title">Similar term</p>
|
|
<p class="last"><a class="reference internal" href="s.html#term-swap-space"><em class="xref std std-term">swap space</em></a>.</p>
|
|
</div>
|
|
</dd>
|
|
<dt id="term-barrier-1">barrier<sup>(1)</sup></dt>
|
|
<dd><p class="first">A barrier is a block on reading from or writing to certain
|
|
<a class="reference internal" href="m.html#term-memory-2"><em class="xref std std-term">memory<sup>(2)</sup></em></a> <a class="reference internal" href="m.html#term-memory-location"><em class="xref std std-term">locations</em></a> by
|
|
certain threads or processes.</p>
|
|
<p>Barriers can be implemented in either software or hardware.
|
|
Software barriers involve additional instructions around
|
|
<a class="reference internal" href="l.html#term-load"><em class="xref std std-term">load</em></a> or <a class="reference internal" href="s.html#term-store-1"><em class="xref std std-term">store<sup>(1)</sup></em></a> operations, which would
|
|
typically be added by a cooperative compiler. Hardware
|
|
barriers don’t require compiler support, and may be
|
|
implemented on common operating systems by using <a class="reference internal" href="m.html#term-memory-protection"><em class="xref std std-term">memory
|
|
protection</em></a>.</p>
|
|
<div class="admonition-relevance-to-memory-management admonition">
|
|
<p class="first admonition-title">Relevance to memory management</p>
|
|
<p class="last">Barriers are used for <a class="reference internal" href="i.html#term-incremental-garbage-collection"><em class="xref std std-term">incremental</em></a> or <a class="reference internal" href="p.html#term-parallel-garbage-collection"><em class="xref std std-term">concurrent</em></a> <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-see-also admonition seealso">
|
|
<p class="first admonition-title">See also</p>
|
|
<p class="last"><a class="reference internal" href="r.html#term-read-barrier"><em class="xref std std-term">read barrier</em></a>, <a class="reference internal" href="w.html#term-write-barrier"><em class="xref std std-term">write barrier</em></a>.</p>
|
|
</div>
|
|
<div class="admonition-related-publication last admonition">
|
|
<p class="first admonition-title">Related publications</p>
|
|
<p class="last"><a class="reference internal" href="../mmref/bib.html#pirinen98"><em>Pirinen (1998)</em></a>, <a class="reference internal" href="../mmref/bib.html#zorn90"><em>Zorn (1990)</em></a>.</p>
|
|
</div>
|
|
</dd>
|
|
<dt id="term-barrier-2">barrier<sup>(2)</sup></dt>
|
|
<dd><p class="first">A memory barrier is an instruction on certain processor
|
|
architectures that will ensure certain guarantees about the
|
|
order of accesses to memory.</p>
|
|
<p>Some processor architectures make very few guarantees about
|
|
the relative orders of <a class="reference internal" href="l.html#term-load"><em class="xref std std-term">load</em></a> and <a class="reference internal" href="s.html#term-store-1"><em class="xref std std-term">store<sup>(1)</sup></em></a>
|
|
operations in the instruction stream and the actual order of
|
|
accesses to <a class="reference internal" href="m.html#term-main-memory"><em class="xref std std-term">main memory</em></a>. These architectures will
|
|
often have special instructions that make stronger guarantees.</p>
|
|
<p>For example, the ARM has the <tt class="docutils literal"><span class="pre">DMB</span></tt> (Data Memory Barrier)
|
|
instruction:</p>
|
|
<blockquote>
|
|
<div>It ensures that all explicit memory accesses that appear
|
|
in program order before the DMB instruction are observed
|
|
before any explicit memory accesses that appear in program
|
|
order after the DMB instruction.</div></blockquote>
|
|
<p class="last">These instructions are vital for certain synchronization
|
|
operations.</p>
|
|
</dd>
|
|
<dt id="term-barrier-hit">barrier hit</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-protection-fault"><em class="xref std std-term">protection fault</em></a>.</p>
|
|
</div>
|
|
</dd>
|
|
<dt id="term-base-pointer">base pointer</dt>
|
|
<dd><p class="first">A <em>base pointer</em> is a <a class="reference internal" href="p.html#term-pointer"><em class="xref std std-term">pointer</em></a> to the base or start of
|
|
an <a class="reference internal" href="o.html#term-object"><em class="xref std std-term">object</em></a>.</p>
|
|
<p>This term is commonly used in opposition to <a class="reference internal" href="d.html#term-derived-pointer"><em class="xref std std-term">derived
|
|
pointer</em></a>.</p>
|
|
<p>Note that <a class="reference internal" href="../mmref/bib.html#bc92a"><em>Boehm & Chase (1992)</em></a> define “base
|
|
pointer” to be “any pointer value directly recognizable by the
|
|
<a class="reference internal" href="c.html#term-collector-1"><em class="xref std std-term">collector<sup>(1)</sup></em></a>”, and this may well include
|
|
<a class="reference internal" href="i.html#term-interior-pointer"><em class="xref std std-term">interior pointers</em></a>.</p>
|
|
<div class="admonition-opposite-term last admonition">
|
|
<p class="first admonition-title">Opposite term</p>
|
|
<p class="last"><a class="reference internal" href="d.html#term-derived-pointer"><em class="xref std std-term">derived pointer</em></a>.</p>
|
|
</div>
|
|
</dd>
|
|
<dt id="term-best-fit">best 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 allocates from the
|
|
smallest suitable <a class="reference internal" href="f.html#term-free-block"><em class="xref std std-term">free block</em></a>. Suitable
|
|
<a class="reference internal" href="a.html#term-allocation-mechanism"><em class="xref std std-term">allocation mechanisms</em></a> include <a class="reference internal" href="s.html#term-sequential-fit"><em class="xref std std-term">sequential fit</em></a>
|
|
searching for a <a class="reference internal" href="p.html#term-perfect-fit"><em class="xref std std-term">perfect fit</em></a>, <a class="reference internal" href="f.html#term-first-fit"><em class="xref std std-term">first fit</em></a> on a
|
|
size-ordered <a class="reference internal" href="f.html#term-free-block-chain"><em class="xref std std-term">free block chain</em></a>, <a class="reference internal" href="s.html#term-segregated-fit"><em class="xref std std-term">segregated
|
|
fits</em></a>, and <a class="reference internal" href="i.html#term-indexed-fit"><em class="xref std std-term">indexed fits</em></a>. Many <a class="reference internal" href="g.html#term-good-fit"><em class="xref std std-term">good fit</em></a>
|
|
allocators are also described as <a class="reference internal" href="#term-best-fit"><em class="xref std std-term">best fit</em></a>.</p>
|
|
<p>In theory, best fit may exhibit bad <a class="reference internal" href="f.html#term-fragmentation"><em class="xref std std-term">fragmentation</em></a>, but
|
|
in practice this is not commonly observed.</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-policy"><em class="xref std std-term">allocation policy</em></a>, <a class="reference internal" href="f.html#term-first-fit"><em class="xref std std-term">first fit</em></a>, <a class="reference internal" href="s.html#term-sequential-fit"><em class="xref std std-term">sequential 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-bibop">BIBOP</dt>
|
|
<dd><div class="admonition-also-known-as first admonition">
|
|
<p class="first admonition-title">Also known as</p>
|
|
<p class="last"><em>big bag of pages</em>.</p>
|
|
</div>
|
|
<p>BIBOP, or <em>BIg Bag Of Pages</em>, is a technique that encodes
|
|
<a class="reference internal" href="o.html#term-object"><em class="xref std std-term">object</em></a> type in the high-order bits of their
|
|
<a class="reference internal" href="a.html#term-address"><em class="xref std std-term">address</em></a>, by using a lookup table that maps from those
|
|
bits to a type.</p>
|
|
<p>Despite the name, the blocks involved need not be the size of
|
|
a <a class="reference internal" href="p.html#term-page"><em class="xref std std-term">page</em></a>.</p>
|
|
<p>BIBOP requires storing only objects of the same type in a
|
|
block, but this has the same advantages as <a class="reference internal" href="s.html#term-segregated-fit"><em class="xref std std-term">segregated
|
|
fits</em></a> in general.</p>
|
|
<div class="admonition-historical-note admonition">
|
|
<p class="first admonition-title">Historical note</p>
|
|
<p class="last">This technique was invented for the PDP-10 MACLISP by JonL
|
|
White and Stavros Macrakis. It was an advance on earlier
|
|
techniques that divided the <a class="reference internal" href="a.html#term-address-space"><em class="xref std std-term">address space</em></a> into
|
|
contiguous blocks for each type.</p>
|
|
</div>
|
|
<div class="admonition-related-publication last admonition">
|
|
<p class="first admonition-title">Related publications</p>
|
|
<p class="last"><a class="reference internal" href="../mmref/bib.html#baker79"><em>Baker (1979)</em></a>, <a class="reference internal" href="../mmref/bib.html#steele77"><em>Steele (1977)</em></a>.</p>
|
|
</div>
|
|
</dd>
|
|
<dt id="term-big-bag-of-pages">big bag of pages</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-bibop"><em class="xref std std-term">BIBOP</em></a>.</p>
|
|
</div>
|
|
</dd>
|
|
<dt id="term-binary-buddies">binary buddies</dt>
|
|
<dd><p class="first">The most common <a class="reference internal" href="#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 all block sizes are a power of two.
|
|
Finding a block’s buddy is then a matter of flipping the
|
|
appropriate bit in the block’s address.</p>
|
|
<p><a class="reference internal" href="i.html#term-internal-fragmentation"><em class="xref std std-term">Internal fragmentation</em></a> is usually high, because
|
|
objects are often not a good fit for power-of-two sized
|
|
blocks.</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-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-bit-array">bit array</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-bitmap"><em class="xref std std-term">bitmap</em></a>.</p>
|
|
</div>
|
|
</dd>
|
|
<dt id="term-bit-table">bit table</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-bitmap"><em class="xref std std-term">bitmap</em></a>.</p>
|
|
</div>
|
|
</dd>
|
|
<dt id="term-bit-vector">bit vector</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-bitmap"><em class="xref std std-term">bitmap</em></a>.</p>
|
|
</div>
|
|
</dd>
|
|
<dt id="term-bitmap">bitmap</dt>
|
|
<dd><div class="admonition-also-known-as first admonition">
|
|
<p class="first admonition-title">Also known as</p>
|
|
<p class="last"><em>bit array</em>, <em>bit table</em>, <em>bit vector</em>, <em>bitset</em>.</p>
|
|
</div>
|
|
<p>A table of bits.</p>
|
|
<div class="admonition-relevance-to-memory-management last admonition">
|
|
<p class="first admonition-title">Relevance to memory management</p>
|
|
<p class="last">Bitmaps are sometimes used to represent the marks in a
|
|
<a class="reference internal" href="m.html#term-mark-sweep"><em class="xref std std-term">mark-sweep</em></a> collector, or the used memory in a
|
|
<a class="reference internal" href="#term-bitmapped-fit"><em class="xref std std-term">bitmapped fits</em></a> <a class="reference internal" href="a.html#term-allocator"><em class="xref std std-term">allocator</em></a>.</p>
|
|
</div>
|
|
</dd>
|
|
<dt id="term-bitmapped-fit">bitmapped fit</dt>
|
|
<dd><p class="first">A class of <a class="reference internal" href="a.html#term-allocation-mechanism"><em class="xref std std-term">allocation mechanisms</em></a> that use a
|
|
<a class="reference internal" href="#term-bitmap"><em class="xref std std-term">bitmap</em></a> to represent the usage of the <a class="reference internal" href="h.html#term-heap"><em class="xref std std-term">heap</em></a>.
|
|
Each bit in the map corresponds to a part of the heap,
|
|
typically a <a class="reference internal" href="w.html#term-word"><em class="xref std std-term">word</em></a>, and is set if that part is in use.
|
|
Allocation is done by searching the bitmap for a run of clear
|
|
bits.</p>
|
|
<p>Bitmapped fit mechanisms have good <a class="reference internal" href="l.html#term-locality-of-reference"><em class="xref std std-term">locality of
|
|
reference</em></a>, as they avoid examining <a class="reference internal" href="i.html#term-in-band-header"><em class="xref std std-term">in-band headers</em></a>
|
|
when allocating.</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="s.html#term-sequential-fit"><em class="xref std std-term">sequential fit</em></a>, <a class="reference internal" href="i.html#term-indexed-fit"><em class="xref std std-term">indexed 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-bitmask">bitmask</dt>
|
|
<dd>A <a class="reference internal" href="#term-bitmap"><em class="xref std std-term">bitmap</em></a> used to select or exclude a set of bits in
|
|
another bitmap.</dd>
|
|
<dt id="term-bitset">bitset</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-bitmap"><em class="xref std std-term">bitmap</em></a>.</p>
|
|
</div>
|
|
</dd>
|
|
<dt id="term-black">black</dt>
|
|
<dd><p class="first">In a <a class="reference internal" href="t.html#term-tri-color-marking"><em class="xref std std-term">tri-color marking</em></a> scheme, black <a class="reference internal" href="o.html#term-object"><em class="xref std std-term">objects</em></a>
|
|
are objects that have been <a class="reference internal" href="s.html#term-scan"><em class="xref std std-term">scanned</em></a>.</p>
|
|
<p>More precisely, black objects have been noted
|
|
<a class="reference internal" href="r.html#term-reachable"><em class="xref std std-term">reachable</em></a> and the <a class="reference internal" href="c.html#term-collector-2"><em class="xref std std-term">collector<sup>(2)</sup></em></a> has finished
|
|
with them and need not visit them again (for the purposes of
|
|
<a class="reference internal" href="t.html#term-trace"><em class="xref std std-term">tracing</em></a>).</p>
|
|
<div class="admonition-opposite-term last admonition">
|
|
<p class="first admonition-title">Opposite terms</p>
|
|
<p class="last"><a class="reference internal" href="w.html#term-white"><em class="xref std std-term">white</em></a>, <a class="reference internal" href="g.html#term-gray"><em class="xref std std-term">gray</em></a>.</p>
|
|
</div>
|
|
</dd>
|
|
<dt id="term-blacklisting"><span id="term-black-listing"></span>blacklisting<br />black-listing</dt>
|
|
<dd><p class="first">A <a class="reference internal" href="c.html#term-conservative-garbage-collection"><em class="xref std std-term">conservative garbage collector</em></a> can be made more effective by <em>blacklisting</em>
|
|
values which resemble <a class="reference internal" href="a.html#term-address"><em class="xref std std-term">addresses</em></a> that may be
|
|
<a class="reference internal" href="a.html#term-allocate"><em class="xref std std-term">allocated</em></a> at in the future, but are known not to be
|
|
<a class="reference internal" href="p.html#term-pointer"><em class="xref std std-term">pointers</em></a> . This list is then used to avoid allocation
|
|
at those addresses.</p>
|
|
<p>For example, such values can be gathered by scanning the
|
|
<a class="reference internal" href="r.html#term-root"><em class="xref std std-term">roots</em></a> before any <a class="reference internal" href="o.html#term-object"><em class="xref std std-term">objects</em></a> have been allocated.</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#boehm93"><em>Boehm (1993)</em></a>.</p>
|
|
</div>
|
|
</dd>
|
|
<dt id="term-block">block</dt>
|
|
<dd><p class="first">Block is a vague term for an (often contiguous) area of
|
|
<a class="reference internal" href="m.html#term-memory-1"><em class="xref std std-term">memory<sup>(1)</sup></em></a>. Often used to describe <a class="reference internal" href="m.html#term-memory-2"><em class="xref std std-term">memory<sup>(2)</sup></em></a>
|
|
<a class="reference internal" href="a.html#term-allocate"><em class="xref std std-term">allocated</em></a> by an <a class="reference internal" href="a.html#term-allocator"><em class="xref std std-term">allocator</em></a> such as
|
|
<a class="reference internal" href="m.html#term-malloc"><em class="xref std std-term">malloc</em></a>.</p>
|
|
<div class="admonition-in-the-mps last admonition">
|
|
<p class="first admonition-title">In the MPS</p>
|
|
<p class="last">The term <em>block</em> is used as a general term for a unit of
|
|
allocation, with <em>object</em> being reserved for
|
|
<a class="reference internal" href="f.html#term-formatted-object"><em class="xref std std-term">formatted objects</em></a>.</p>
|
|
</div>
|
|
</dd>
|
|
<dt id="term-bounds-error">bounds error</dt>
|
|
<dd><div class="admonition-see first last admonition">
|
|
<p class="first admonition-title">See</p>
|
|
<p class="last"><a class="reference internal" href="o.html#term-overwriting-error"><em class="xref std std-term">overwriting error</em></a>.</p>
|
|
</div>
|
|
</dd>
|
|
<dt id="term-boxed">boxed</dt>
|
|
<dd><p class="first">Boxed <a class="reference internal" href="o.html#term-object"><em class="xref std std-term">objects</em></a> are represented by a <a class="reference internal" href="p.html#term-pointer"><em class="xref std std-term">pointer</em></a> to
|
|
a <a class="reference internal" href="#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> that contains the object
|
|
data. Sometimes the pointer is <a class="reference internal" href="t.html#term-tag"><em class="xref std std-term">tagged</em></a> to
|
|
distinguish it from an <a class="reference internal" href="u.html#term-unboxed"><em class="xref std std-term">unboxed</em></a> object, or to represent
|
|
its type. Only the pointer is duplicated when the object is
|
|
passed around, so updates to the object are reflected
|
|
everywhere.</p>
|
|
<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-unboxed"><em class="xref std std-term">unboxed</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="t.html#term-tag"><em class="xref std std-term">tag</em></a>, <a class="reference internal" href="#term-bibop"><em class="xref std std-term">BIBOP</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#gudeman93"><em>Gudeman (1993)</em></a>.</p>
|
|
</div>
|
|
</dd>
|
|
<dt id="term-break-table">break-table</dt>
|
|
<dd><p class="first">A break-table is a data structure used by a
|
|
<a class="reference internal" href="m.html#term-mark-compact"><em class="xref std std-term">mark-compact</em></a> collector to store the <a class="reference internal" href="r.html#term-relocation"><em class="xref std std-term">relocation</em></a>
|
|
information.</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="m.html#term-mark-compact"><em class="xref std std-term">mark-compact</em></a>.</p>
|
|
</div>
|
|
</dd>
|
|
<dt id="term-brk">brk</dt>
|
|
<dd><p class="first"><tt class="docutils literal"><span class="pre">brk</span></tt> is a Unix system call that sets the limit of the data
|
|
segment. This limit is known as the <em>break</em>.</p>
|
|
<p>The <a class="reference internal" href="../mmref/lang.html#term-c"><em class="xref std std-term">C</em></a> library implementation of <a class="reference internal" href="m.html#term-malloc"><em class="xref std std-term">malloc</em></a> usually
|
|
<a class="reference internal" href="a.html#term-allocate"><em class="xref std std-term">allocates</em></a> <a class="reference internal" href="m.html#term-memory-2"><em class="xref std std-term">memory<sup>(2)</sup></em></a> for the
|
|
<a class="reference internal" href="h.html#term-heap"><em class="xref std std-term">heap</em></a> by extending the data segment using <tt class="docutils literal"><span class="pre">brk</span></tt> or
|
|
<a class="reference internal" href="s.html#term-sbrk"><em class="xref std std-term">sbrk</em></a>.</p>
|
|
<p>Most implementations of <tt class="docutils literal"><span class="pre">malloc</span></tt> never shrink the data
|
|
segment, so the memory usage of a process never decreases. In
|
|
most Unix systems, the data segment resides immediately above
|
|
the program code (text segment) in the <a class="reference internal" href="a.html#term-address-space"><em class="xref std std-term">address space</em></a>.</p>
|
|
<div class="last figure align-center">
|
|
<img alt="Diagram: A simplified view of the address space of a Unix process." src="../_images/brk.svg" /><p class="caption">A simplified view of the address space of a Unix process.</p>
|
|
</div>
|
|
</dd>
|
|
<dt id="term-broken-heart">broken heart</dt>
|
|
<dd><p class="first"><a class="reference internal" href="c.html#term-copying-garbage-collection"><em class="xref std std-term">Copying 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
|
|
<a class="reference internal" href="s.html#term-semi-space"><em class="xref std std-term">semi-space</em></a>. They leave a <a class="reference internal" href="f.html#term-forwarding-pointer"><em class="xref std std-term">forwarding pointer</em></a> in
|
|
the old <a class="reference internal" href="m.html#term-memory-location"><em class="xref std std-term">location</em></a>, pointing to the
|
|
new. The object at the old location is known as a broken
|
|
heart.</p>
|
|
<div class="admonition-similar-term last admonition">
|
|
<p class="first admonition-title">Similar term</p>
|
|
<p class="last"><a class="reference internal" href="f.html#term-forwarding-pointer"><em class="xref std std-term">forwarding pointer</em></a>.</p>
|
|
</div>
|
|
</dd>
|
|
<dt id="term-bucket">bucket</dt>
|
|
<dd><p class="first">In a <a class="reference internal" href="g.html#term-generational-garbage-collection"><em class="xref std std-term">generational garbage collector</em></a>, it is often desirable to divide
|
|
<a class="reference internal" href="g.html#term-generation"><em class="xref std std-term">generations</em></a> by the age of the
|
|
<a class="reference internal" href="o.html#term-object"><em class="xref std std-term">object</em></a>. These divisions are known as buckets.</p>
|
|
<div class="admonition-see-also last admonition seealso">
|
|
<p class="first admonition-title">See also</p>
|
|
<p class="last"><a class="reference internal" href="g.html#term-generational-garbage-collection"><em class="xref std std-term">generational garbage collection</em></a>, <a class="reference internal" href="a.html#term-aging-space"><em class="xref std std-term">aging space</em></a>, <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-buddy-system">buddy system</dt>
|
|
<dd><p class="first">Buddy systems are a subclass of <a class="reference internal" href="s.html#term-strict-segregated-fit"><em class="xref std std-term">strict segregated fit</em></a>
|
|
<a class="reference internal" href="a.html#term-allocation-mechanism"><em class="xref std std-term">allocation mechanisms</em></a> which
|
|
make <a class="reference internal" href="s.html#term-split"><em class="xref std std-term">splitting</em></a> and <a class="reference internal" href="c.html#term-coalesce"><em class="xref std std-term">coalescing</em></a> fast by pairing each block with a unique adjacent
|
|
<em>buddy</em> block.</p>
|
|
<p>There is an array of <a class="reference internal" href="f.html#term-free-list"><em class="xref std std-term">free lists</em></a>, one for
|
|
each allowable block size. Allocation rounds up the requested
|
|
size to an allowable size and allocates from the corresponding
|
|
free list. If the free list is empty, a larger block is
|
|
selected and split. A block may only be split into a pair of
|
|
buddies.</p>
|
|
<p>A block may only be coalesced with its buddy, and this is only
|
|
possible if the buddy has not been split into smaller blocks.</p>
|
|
<p>The advantage of buddy systems is that the buddy of a block
|
|
being freed can be quickly found by a simple address
|
|
computation. The disadvantage of buddy systems is that the
|
|
restricted set of block sizes leads to high <a class="reference internal" href="i.html#term-internal-fragmentation"><em class="xref std std-term">internal
|
|
fragmentation</em></a>, as does the limited ability to coalesce.</p>
|
|
<p>Different sorts of buddy system are distinguished by the
|
|
available block sizes and the method of splitting. They
|
|
include <a class="reference internal" href="#term-binary-buddies"><em class="xref std std-term">binary buddies</em></a> (the most common),
|
|
<a class="reference internal" href="f.html#term-fibonacci-buddies"><em class="xref std std-term">Fibonacci buddies</em></a>, <a class="reference internal" href="w.html#term-weighted-buddies"><em class="xref std std-term">weighted buddies</em></a>, and
|
|
<a class="reference internal" href="d.html#term-double-buddies"><em class="xref std std-term">double buddies</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="s.html#term-segregated-free-list"><em class="xref std std-term">segregated free lists</em></a>, <a class="reference internal" href="s.html#term-segregated-fit"><em class="xref std std-term">segregated fit</em></a>, <a class="reference internal" href="s.html#term-strict-segregated-fit"><em class="xref std std-term">strict segregated 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-buffer">buffer</dt>
|
|
<dd><p class="first">A <em>buffer</em> is a large <a class="reference internal" href="#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> from
|
|
which blocks are <a class="reference internal" href="a.html#term-allocate"><em class="xref std std-term">allocated</em></a> contiguously, as a simple
|
|
technique for fast <a class="reference internal" href="a.html#term-allocate"><em class="xref std std-term">allocation</em></a>.</p>
|
|
<p>By keeping only a <em>high-water</em> mark (that is, a
|
|
<a class="reference internal" href="p.html#term-pointer"><em class="xref std std-term">pointer</em></a> to the start of unused memory), the buffer
|
|
technique avoids expensive <a class="reference internal" href="i.html#term-in-band-header"><em class="xref std std-term">in-band headers</em></a> and the
|
|
searching of <a class="reference internal" href="f.html#term-free-block-chain"><em class="xref std std-term">free block chains</em></a>. Buffers tend to,
|
|
however, lead to <a class="reference internal" href="e.html#term-external-fragmentation"><em class="xref std std-term">external fragmentation</em></a>.</p>
|
|
<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#ael88"><em>Appel et al. (1988)</em></a>.</p>
|
|
</div>
|
|
<div class="admonition-in-the-mps last admonition">
|
|
<p class="first admonition-title">In the MPS</p>
|
|
<p class="last">Buffers are implemented using <a class="reference internal" href="a.html#term-allocation-point"><em class="xref std std-term">allocation points</em></a>
|
|
attached to <a class="reference internal" href="p.html#term-pool"><em class="xref std std-term">pools</em></a>.</p>
|
|
</div>
|
|
</dd>
|
|
<dt id="term-bus-error">bus error</dt>
|
|
<dd><p class="first">Strictly speaking, <em>a bus error</em> is a fault on a hardware bus,
|
|
such as when an invalid <a class="reference internal" href="a.html#term-address"><em class="xref std std-term">address</em></a> is issued.</p>
|
|
<p>Generally, any hardware exception caused by a <a class="reference internal" href="m.html#term-memory-2"><em class="xref std std-term">memory<sup>(2)</sup></em></a> access (for example, <a class="reference internal" href="l.html#term-load"><em class="xref std std-term">loading</em></a> an
|
|
<a class="reference internal" href="u.html#term-unaligned"><em class="xref std std-term">unaligned</em></a> <a class="reference internal" href="w.html#term-word"><em class="xref std std-term">word</em></a>) is termed a <em>bus error</em>. The
|
|
term is often used more loosely as a synonym for any memory
|
|
access error.</p>
|
|
<div class="admonition-see-also last admonition seealso">
|
|
<p class="first admonition-title">See also</p>
|
|
<p class="last"><a class="reference internal" href="s.html#term-segmentation-violation"><em class="xref std std-term">segmentation violation</em></a>.</p>
|
|
</div>
|
|
</dd>
|
|
<dt id="term-byte-1">byte<sup>(1)</sup></dt>
|
|
<dd><p class="first">A unit of storage measurement, equal to 8 bits.</p>
|
|
<p>It does not matter how the bits are arranged: a byte is just a
|
|
quantity.</p>
|
|
<p>This is the sense of byte used in the terms <a class="reference internal" href="k.html#term-kilobyte"><em class="xref std std-term">kilobyte</em></a>,
|
|
<a class="reference internal" href="m.html#term-megabyte"><em class="xref std std-term">megabyte</em></a>, <a class="reference internal" href="g.html#term-gigabyte"><em class="xref std std-term">gigabyte</em></a>, <a class="reference internal" href="t.html#term-terabyte"><em class="xref std std-term">terabyte</em></a>, etc. The
|
|
prefixes in these terms derive from the SI prefixes for powers
|
|
of 1000, but since powers of two are much more common in
|
|
binary computers, they are used to denote powers of 1024 (2<sup>10</sup>).</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="w.html#term-word"><em class="xref std std-term">word</em></a>.</p>
|
|
</div>
|
|
</dd>
|
|
<dt id="term-byte-2">byte<sup>(2)</sup></dt>
|
|
<dd><p class="first">A data type defined by a processor architecture.</p>
|
|
<p>For example, the smallest <a class="reference internal" href="a.html#term-address"><em class="xref std std-term">addressable</em></a>
|
|
<a class="reference internal" href="m.html#term-memory-location"><em class="xref std std-term">memory location</em></a> on the Intel x86 family is the 8-bit
|
|
byte.</p>
|
|
<div class="admonition-historical-note admonition">
|
|
<p class="first admonition-title">Historical note</p>
|
|
<p class="last">The PDP-10 had 36-bit <a class="reference internal" href="w.html#term-word"><em class="xref std std-term">words</em></a>, and defined “byte” to
|
|
be a general sub-<a class="reference internal" href="w.html#term-word"><em class="xref std std-term">word</em></a> bit-field: compare
|
|
<a class="reference internal" href="#term-byte-3"><em class="xref std std-term">byte<sup>(3)</sup></em></a>. On this machine it was commonplace for
|
|
characters to be packed four or five to a word using 9- or
|
|
7-bit bytes respectively.</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="w.html#term-word"><em class="xref std std-term">word</em></a>.</p>
|
|
</div>
|
|
</dd>
|
|
<dt id="term-byte-3">byte<sup>(3)</sup></dt>
|
|
<dd><p class="first">A contiguous set of bits used to represent a range of values
|
|
compactly.</p>
|
|
<p>The number of bits in a byte is a measure of the information
|
|
content of the byte. An <em>n</em>-bit byte can represent 2<sup>n</sup>
|
|
distinct values.</p>
|
|
<p class="last">Bytes may be packed into (or otherwise stored in bit-fields
|
|
of) integers, words, or other aligned values for space
|
|
efficiency.</p>
|
|
</dd>
|
|
<dt id="term-byte-4">byte<sup>(4)</sup></dt>
|
|
<dd><p class="first">A data type or storage unit defined by a programming language.</p>
|
|
<p class="last">In ANSI/ISO <a class="reference internal" href="../mmref/lang.html#term-c"><em class="xref std std-term">C</em></a>, “the unit of data storage large enough
|
|
to hold the basic character set of the execution environment”.
|
|
In this sense, it is often used synonymously with the C type
|
|
<tt class="docutils literal"><span class="pre">char</span></tt>. C defines <tt class="docutils literal"><span class="pre">sizeof(char)</span></tt> to be 1. Many
|
|
architectures that run C programs equate this sense of byte
|
|
and <a class="reference internal" href="#term-byte-2"><em class="xref std std-term">byte<sup>(2)</sup></em></a>.</p>
|
|
</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="a.html"
|
|
title="previous chapter">Memory Management Glossary: A</a></p>
|
|
<h4>Next topic</h4>
|
|
<p class="topless"><a href="c.html"
|
|
title="next chapter">Memory Management Glossary: C</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="c.html" title="Memory Management Glossary: C"
|
|
>next</a> |</li>
|
|
<li class="right" >
|
|
<a href="a.html" title="Memory Management Glossary: A"
|
|
>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> |