1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2026-01-13 23:10:26 -08:00
emacs/mps/manual/html/glossary/b.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

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 &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: 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> &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-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&#8217;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 &amp; Chase (1992)</em></a> define &#8220;base
pointer&#8221; to be &#8220;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>&#8221;, 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&#8217;s buddy is then a matter of flipping the
appropriate bit in the block&#8217;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 &#8220;byte&#8221; 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>, &#8220;the unit of data storage large enough
to hold the basic character set of the execution environment&#8221;.
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&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="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> &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>