1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2025-12-27 07:41:28 -08:00
emacs/mps/manual/html/guide/overview.html
Gareth Rees 28419106ca Build html version of the manual in manual/html.
Check in HTML version of the manual (writable on client) so that it will display automatically on the Ravenbrook server and so that we can easily include it in product releases.

Copied from Perforce
 Change: 180338
 ServerID: perforce.ravenbrook.com
2012-11-05 17:18:50 +00:00

207 lines
No EOL
15 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>1. Overview of the Memory Pool System &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="Guide" href="index.html" />
<link rel="next" title="2. Building the Memory Pool System" href="build.html" />
<link rel="prev" title="Guide" href="index.html" />
</head>
<body>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="build.html" title="2. Building the Memory Pool System"
accesskey="N">next</a> |</li>
<li class="right" >
<a href="index.html" title="Guide"
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">Guide</a> &raquo;</li>
</ul>
</div>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body">
<div class="section" id="overview-of-the-memory-pool-system">
<span id="guide-overview"></span><span id="index-0"></span><h1>1. Overview of the Memory Pool System<a class="headerlink" href="#overview-of-the-memory-pool-system" title="Permalink to this headline"></a></h1>
<p>The Memory Pool System is a very general, adaptable, flexible,
reliable, and efficient memory management system. It permits the
flexible combination of memory management techniques, supporting
<a class="reference internal" href="../glossary/m.html#term-manual-memory-management"><em class="xref std std-term">manual</em></a> and <a class="reference internal" href="../glossary/a.html#term-automatic-memory-management"><em class="xref std std-term">automatic memory
management</em></a>, <a class="reference internal" href="../glossary/i.html#term-inline-allocation-1"><em class="xref std std-term">inline allocation</em></a>,
<a class="reference internal" href="../glossary/f.html#term-finalization"><em class="xref std std-term">finalization</em></a>, <a class="reference internal" href="../glossary/w.html#term-weak-reference-1"><em class="xref std std-term">weakness</em></a>, and
multiple concurrent co-operating <a class="reference internal" href="../glossary/i.html#term-incremental-garbage-collection"><em class="xref std std-term">incremental</em></a> <a class="reference internal" href="../glossary/g.html#term-generational-garbage-collection"><em class="xref std std-term">generational</em></a> <a class="reference internal" href="../glossary/g.html#term-garbage-collection"><em class="xref std std-term">garbage collections</em></a>. It also
includes a library of <a class="reference internal" href="../glossary/p.html#term-pool-class"><em class="xref std std-term">memory pool classes</em></a>
implementing specialized memory management policies.</p>
<p>The MPS has been in development since 1994 and deployed in successful
commercial products since 1997. Bugs are almost unknown in production.
It is under continuous development and support by <a class="reference external" href="http://www.ravenbrook.com">Ravenbrook</a>.</p>
<p>The MPS is distributed under an <a class="reference internal" href="../copyright.html#license"><em>open source license</em></a>. The license is designed to make it possible for you to use
the MPS in your own projects, provided that you either don&#8217;t
distribute your product, or your product is open source too.</p>
<p>If the licensing terms aren&#8217;t suitable for you (for example, you&#8217;re
developing a closed-source commercial product or a compiler run-time
system) you can easily license the MPS under different terms from
Ravenbrook by arrangement. Please <a class="reference internal" href="../contact.html#contact"><em>contact us</em></a> at
<a class="reference external" href="mailto:mps-questions&#37;&#52;&#48;ravenbrook&#46;com">mps-questions<span>&#64;</span>ravenbrook<span>&#46;</span>com</a>
for details.</p>
<div class="section" id="supported-target-platforms">
<span id="index-1"></span><h2>1.1. Supported target platforms<a class="headerlink" href="#supported-target-platforms" title="Permalink to this headline"></a></h2>
<p>The MPS is currently supported for deployment on:</p>
<ul class="simple">
<li>Windows XP or later on IA-32 and x86-64, using Microsoft Visual C/C++;</li>
<li>Linux (Ubuntu 11 and RHEL 6.3 known good, otherwise YMMV) on IA-32 and x86-64, using GCC;</li>
<li>FreeBSD 7 or later, on IA-32 and x86-64, using GCC;</li>
<li>Mac OS X 10.4 or later, on IA-32 and x86-64 (single threaded only), using Clang/LLVM.</li>
</ul>
<p>The MPS will <em>not</em> work in a multi-threaded 32-bit application on 64-bit
Windows 7. This is due to a serious fault in Microsoft&#8217;s WOW64 emulator
that we are powerless to correct. It is due to be fixed in Windows 8.
See <a class="reference external" href="http://zachsaw.blogspot.co.uk/2010/11/wow64-bug-getthreadcontext-may-return.html">WOW64 bug: GetThreadContext() may return stale contents</a>.</p>
<p>The MPS is highly portable and has run on many other processors and
operating systems in the past (see <a class="reference internal" href="build.html#guide-build"><em>Building the Memory Pool System</em></a>). Most of the
MPS is written in very pure ANSI C and compiles without warnings on
anything.</p>
</div>
<div class="section" id="technical-introduction">
<span id="index-2"></span><h2>1.2. Technical introduction<a class="headerlink" href="#technical-introduction" title="Permalink to this headline"></a></h2>
<p>The figure below gives a simplified picture of a program&#8217;s memory from
the point of view of the Memory Pool System.</p>
<div class="figure align-center">
<img alt="Diagram: Overview of the Memory Pool System." src="../_images/overview.svg" /><p class="caption">Overview of the Memory Pool System.</p>
</div>
<p>The <strong>arena</strong> is the top-level data structure in the MPS. An
<a class="reference internal" href="../glossary/a.html#term-arena"><em class="xref std std-term">arena</em></a> is responsible for requesting <a class="reference internal" href="../glossary/m.html#term-memory-3"><em class="xref std std-term">memory<sup>(3)</sup></em></a> from
the operating system (and returning it), for making memory available
to <a class="reference internal" href="../glossary/p.html#term-pool"><em class="xref std std-term">pools</em></a>, and for <a class="reference internal" href="../glossary/g.html#term-garbage-collection"><em class="xref std std-term">garbage collection</em></a>. Multiple
arenas are supported, but it&#8217;s usually best to have only one arena in
your program, because the MPS can&#8217;t collect cyclic structures that
span multiple arenas. See <a class="reference internal" href="../topic/arena.html#topic-arena"><em>Arenas</em></a>.</p>
<p>The MPS is designed to co-operate with other memory managers (for
example <a class="reference internal" href="../glossary/m.html#term-malloc"><em class="xref std std-term">malloc</em></a> and <a class="reference internal" href="../glossary/f.html#term-free-2"><em class="xref std std-term">free<sup>(2)</sup></em></a> in <a class="reference internal" href="../mmref/lang.html#term-c"><em class="xref std std-term">C</em></a>, or operators
<tt class="docutils literal"><span class="pre">new</span></tt> and <tt class="docutils literal"><span class="pre">delete</span></tt> in <a class="reference internal" href="../mmref/lang.html#term-6"><em class="xref std std-term">C++</em></a>), so you need not move all your
memory management to the MPS at once, and you can co-operate with
libraries that use other allocation mechanisms.</p>
<p>Within the arena you create one or more <strong>pools</strong>. A <a class="reference internal" href="../glossary/p.html#term-pool"><em class="xref std std-term">pool</em></a> is
responsible for requesting memory from the <a class="reference internal" href="../glossary/a.html#term-arena"><em class="xref std std-term">arena</em></a> and making it
available to your program. See <a class="reference internal" href="../topic/pool.html#topic-pool"><em>Pools</em></a>.</p>
<p>Pools belong to <strong>pool classes</strong> that specify policies for how their
memory is managed. Some pools are <a class="reference internal" href="../glossary/m.html#term-manual-memory-management"><em class="xref std std-term">manually managed</em></a> (you must explicitly return memory to the pool,
for example by calling <a class="reference internal" href="../topic/allocation.html#mps_free" title="mps_free"><tt class="xref c c-func docutils literal"><span class="pre">mps_free()</span></tt></a>) and others are
<a class="reference internal" href="../glossary/a.html#term-automatic-memory-management"><em class="xref std std-term">automatically managed</em></a> (the
<a class="reference internal" href="../glossary/g.html#term-garbage-collector"><em class="xref std std-term">garbage collector</em></a> reclaims <a class="reference internal" href="../glossary/u.html#term-unreachable"><em class="xref std std-term">unreachable</em></a> blocks). See
<a class="reference internal" href="../pool/index.html#pool"><em>Pool reference</em></a>.</p>
<p><a class="reference internal" href="../glossary/f.html#term-formatted-object"><em class="xref std std-term">Formatted</em></a> pools need you to tell them how to
<strong>scan</strong> for <a class="reference internal" href="../glossary/r.html#term-reference"><em class="xref std std-term">references</em></a> to allocated blocks. See
<a class="reference internal" href="../topic/scanning.html#topic-scanning"><em>Scanning</em></a>.</p>
<p>The arena needs you to tell it how to find your <strong>roots</strong>: references to
allocated blocks that are stored in static data, in memory not managed
by the MPS, or on your program&#8217;s <a class="reference internal" href="../glossary/r.html#term-register"><em class="xref std std-term">registers</em></a> or
<a class="reference internal" href="../glossary/c.html#term-control-stack"><em class="xref std std-term">control stack</em></a>. See <a class="reference internal" href="../topic/root.html#topic-root"><em>Roots</em></a>.</p>
<p>The MPS is designed to work with multi-threaded programs. Functions in
the C interface are thread safe, except in a few documented
cases. See <a class="reference internal" href="../topic/thread.html#topic-thread"><em>Threads</em></a>. The <a class="reference internal" href="../glossary/a.html#term-allocation-point-protocol"><em class="xref std std-term">allocation point
protocol</em></a> provides fast lock-free allocation on multiple threads
simultaneously. See <a class="reference internal" href="../topic/allocation.html#topic-allocation"><em>Allocation</em></a>.</p>
<p>The garbage collector is <a class="reference internal" href="../glossary/i.html#term-incremental-garbage-collection"><em class="xref std std-term">incremental</em></a>: it proceeds in small steps interleaved with the execution
of your program, so there are no long waits. See
<a class="reference internal" href="../topic/collection.html#topic-collection"><em>Garbage collection</em></a>.</p>
</div>
<div class="section" id="what-next">
<h2>1.3. What next?<a class="headerlink" href="#what-next" title="Permalink to this headline"></a></h2>
<p>For a much more detailed technical overview of the MPS, see
<a class="reference internal" href="../mmref/bib.html#brooksby02"><em>Brooksby (2002)</em></a>.</p>
<p>If you&#8217;re going to try it out, see <a class="reference internal" href="build.html#guide-build"><em>Building the Memory Pool System</em></a>.</p>
<p>If you have a program in need of memory management, then you&#8217;ll want
to learn how to integrate it with the Memory Pool System. See
<a class="reference internal" href="lang.html#guide-lang"><em>Garbage collecting a language with the Memory Pool System</em></a>.</p>
<p>If you want to know more technical details, they appear in the
<a class="reference internal" href="../topic/index.html#reference"><em>Reference</em></a>.</p>
</div>
</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>
<h3><a href="../index.html">Table Of Contents</a></h3>
<ul>
<li><a class="reference internal" href="#">1. Overview of the Memory Pool System</a><ul>
<li><a class="reference internal" href="#supported-target-platforms">1.1. Supported target platforms</a></li>
<li><a class="reference internal" href="#technical-introduction">1.2. Technical introduction</a></li>
<li><a class="reference internal" href="#what-next">1.3. What next?</a></li>
</ul>
</li>
</ul>
<h4>Previous topic</h4>
<p class="topless"><a href="index.html"
title="previous chapter">Guide</a></p>
<h4>Next topic</h4>
<p class="topless"><a href="build.html"
title="next chapter">2. Building the Memory Pool System</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="build.html" title="2. Building the Memory Pool System"
>next</a> |</li>
<li class="right" >
<a href="index.html" title="Guide"
>previous</a> |</li>
<li><a href="../index.html">Memory Pool System 1.111.0 documentation</a> &raquo;</li>
<li><a href="index.html" >Guide</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; <a href="../copyright.html">Copyright</a> 2012, Ravenbrook Limited.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.1.3.
</div>
</body>
</html>