1 <html><head><meta http-equiv=
"Content-Type" content=
"text/html; charset=UTF-8"><title>Design Issues
</title><meta name=
"generator" content=
"DocBook XSL-NS Stylesheets V1.76.1"><meta name=
"keywords" content=
"
5 "><meta name=
"keywords" content=
"
9 "><meta name=
"keywords" content=
"
15 "><link rel=
"home" href=
"../index.html" title=
"The GNU C++ Library"><link rel=
"up" href=
"mt_allocator.html" title=
"Chapter 20. The mt_allocator"><link rel=
"prev" href=
"mt_allocator.html" title=
"Chapter 20. The mt_allocator"><link rel=
"next" href=
"bk01pt03ch20s03.html" title=
"Implementation"></head><body bgcolor=
"white" text=
"black" link=
"#0000FF" vlink=
"#840084" alink=
"#0000FF"><div class=
"navheader"><table width=
"100%" summary=
"Navigation header"><tr><th colspan=
"3" align=
"center">Design Issues
</th></tr><tr><td width=
"20%" align=
"left"><a accesskey=
"p" href=
"mt_allocator.html">Prev
</a> </td><th width=
"60%" align=
"center">Chapter
20. The mt_allocator
</th><td width=
"20%" align=
"right"> <a accesskey=
"n" href=
"bk01pt03ch20s03.html">Next
</a></td></tr></table><hr></div><div class=
"section" title=
"Design Issues"><div class=
"titlepage"><div><div><h2 class=
"title" style=
"clear: both"><a name=
"allocator.mt.design_issues"></a>Design Issues
</h2></div></div></div><div class=
"section" title=
"Overview"><div class=
"titlepage"><div><div><h3 class=
"title"><a name=
"allocator.mt.overview"></a>Overview
</h3></div></div></div><p> There are three general components to the allocator: a datum
16 describing the characteristics of the memory pool, a policy class
17 containing this pool that links instantiation types to common or
18 individual pools, and a class inheriting from the policy class that is
20 </p><p>The datum describing pools characteristics is
21 </p><pre class=
"programlisting">
22 template
<bool _Thread
>
24 </pre><p> This class is parametrized on thread support, and is explicitly
25 specialized for both multiple threads (with
<code class=
"code">bool==true
</code>)
26 and single threads (via
<code class=
"code">bool==false
</code>.) It is possible to
27 use a custom pool datum instead of the default class that is provided.
28 </p><p> There are two distinct policy classes, each of which can be used
29 with either type of underlying pool datum.
30 </p><pre class=
"programlisting">
31 template
<bool _Thread
>
32 struct __common_pool_policy
34 template
<typename _Tp, bool _Thread
>
35 struct __per_type_pool_policy
36 </pre><p> The first policy,
<code class=
"code">__common_pool_policy
</code>, implements a
37 common pool. This means that allocators that are instantiated with
38 different types, say
<code class=
"code">char
</code> and
<code class=
"code">long
</code> will both
39 use the same pool. This is the default policy.
40 </p><p> The second policy,
<code class=
"code">__per_type_pool_policy
</code>, implements
41 a separate pool for each instantiating type. Thus,
<code class=
"code">char
</code>
42 and
<code class=
"code">long
</code> will use separate pools. This allows per-type
44 </p><p> Putting this all together, the actual allocator class is
45 </p><pre class=
"programlisting">
46 template
<typename _Tp, typename _Poolp = __default_policy
>
47 class __mt_alloc : public __mt_alloc_base
<_Tp
>, _Poolp
48 </pre><p> This class has the interface required for standard library allocator
49 classes, namely member functions
<code class=
"code">allocate
</code> and
50 <code class=
"code">deallocate
</code>, plus others.
51 </p></div></div><div class=
"navfooter"><hr><table width=
"100%" summary=
"Navigation footer"><tr><td width=
"40%" align=
"left"><a accesskey=
"p" href=
"mt_allocator.html">Prev
</a> </td><td width=
"20%" align=
"center"><a accesskey=
"u" href=
"mt_allocator.html">Up
</a></td><td width=
"40%" align=
"right"> <a accesskey=
"n" href=
"bk01pt03ch20s03.html">Next
</a></td></tr><tr><td width=
"40%" align=
"left" valign=
"top">Chapter
20. The mt_allocator
</td><td width=
"20%" align=
"center"><a accesskey=
"h" href=
"../index.html">Home
</a></td><td width=
"40%" align=
"right" valign=
"top"> Implementation
</td></tr></table></div></body></html>