代码拉取完成,页面将自动刷新
<!-- HTML header for doxygen 1.8.16-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.18"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>memory: Allocator implementations</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">memory
</div>
</td>
</tr>
</tbody>
</table>
</div>
<div id="main-nav">
<ul class="sm sm-dox" id="main-menu">
<li><a href="index.html">Main Page</a></li>
<li><a href="md_doc_tutorial.html">Tutorial</a></li>
<li><a href="namespacefoonathan_1_1memory.html">Index</a></li>
<li><a href="files.html">Files</a></li>
</ul>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.18 -->
</div><!-- top -->
<div class="header">
<div class="summary">
<a href="#nested-classes">Classes</a> |
<a href="#define-members">Macros</a> |
<a href="#typedef-members">Typedefs</a> |
<a href="#func-members">Functions</a> |
<a href="#var-members">Variables</a> </div>
<div class="headertitle">
<div class="title">Allocator implementations</div> </div>
</div><!--header-->
<div class="contents">
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
Classes</h2></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classfoonathan_1_1memory_1_1iteration__allocator.html">iteration_allocator< N, BlockOrRawAllocator ></a></td></tr>
<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">A stateful <a href="md_doc_concepts.html#concept_rawallocator">RawAllocator</a> that is designed for allocations in a loop. <a href="classfoonathan_1_1memory_1_1iteration__allocator.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classfoonathan_1_1memory_1_1double__frame__allocator.html">double_frame_allocator< BlockOrRawAllocator ></a></td></tr>
<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">An alias for <a class="el" href="classfoonathan_1_1memory_1_1iteration__allocator.html">iteration_allocator</a> for two iterations. <a href="classfoonathan_1_1memory_1_1double__frame__allocator.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classfoonathan_1_1memory_1_1allocator__traits_3_01iteration__allocator_3_01_n_00_01_block_allocator_01_4_01_4.html">allocator_traits< iteration_allocator< N, BlockAllocator > ></a></td></tr>
<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Specialization of the <a class="el" href="classfoonathan_1_1memory_1_1allocator__traits.html">allocator_traits</a> for <a class="el" href="classfoonathan_1_1memory_1_1iteration__allocator.html">iteration_allocator</a>. <a href="classfoonathan_1_1memory_1_1allocator__traits_3_01iteration__allocator_3_01_n_00_01_block_allocator_01_4_01_4.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classfoonathan_1_1memory_1_1composable__allocator__traits_3_01iteration__allocator_3_01_n_00_01_block_allocator_01_4_01_4.html">composable_allocator_traits< iteration_allocator< N, BlockAllocator > ></a></td></tr>
<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Specialization of the <a class="el" href="classfoonathan_1_1memory_1_1composable__allocator__traits.html">composable_allocator_traits</a> for <a class="el" href="classfoonathan_1_1memory_1_1iteration__allocator.html">iteration_allocator</a> classes. <a href="classfoonathan_1_1memory_1_1composable__allocator__traits_3_01iteration__allocator_3_01_n_00_01_block_allocator_01_4_01_4.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classfoonathan_1_1memory_1_1joint.html">joint</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Tag type that can't be created. <a href="classfoonathan_1_1memory_1_1joint.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structfoonathan_1_1memory_1_1joint__size.html">joint_size</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Tag type to make the joint size more explicit. <a href="structfoonathan_1_1memory_1_1joint__size.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classfoonathan_1_1memory_1_1joint__type.html">joint_type< T ></a></td></tr>
<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">CRTP base class for all objects that want to use joint memory. <a href="classfoonathan_1_1memory_1_1joint__type.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classfoonathan_1_1memory_1_1joint__ptr.html">joint_ptr< T, RawAllocator ></a></td></tr>
<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">A pointer to an object where all allocations are joint. <a href="classfoonathan_1_1memory_1_1joint__ptr.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classfoonathan_1_1memory_1_1joint__allocator.html">joint_allocator</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">A <a href="md_doc_concepts.html#concept_rawallocator">RawAllocator</a> that uses the additional joint memory for its allocation. <a href="classfoonathan_1_1memory_1_1joint__allocator.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structfoonathan_1_1memory_1_1is__shared__allocator_3_01joint__allocator_01_4.html">is_shared_allocator< joint_allocator ></a></td></tr>
<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Specialization of <a class="el" href="structfoonathan_1_1memory_1_1is__shared__allocator.html">is_shared_allocator</a> to mark <a class="el" href="classfoonathan_1_1memory_1_1joint__allocator.html">joint_allocator</a> as shared. <a href="structfoonathan_1_1memory_1_1is__shared__allocator_3_01joint__allocator_01_4.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structfoonathan_1_1memory_1_1propagation__traits_3_01joint__allocator_01_4.html">propagation_traits< joint_allocator ></a></td></tr>
<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Specialization of the <a class="el" href="structfoonathan_1_1memory_1_1propagation__traits.html">propagation_traits</a> for the <a class="el" href="classfoonathan_1_1memory_1_1joint__allocator.html">joint_allocator</a>. <a href="structfoonathan_1_1memory_1_1propagation__traits_3_01joint__allocator_01_4.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classfoonathan_1_1memory_1_1joint__array.html">joint_array< T ></a></td></tr>
<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">A zero overhead dynamic array using joint memory. <a href="classfoonathan_1_1memory_1_1joint__array.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classfoonathan_1_1memory_1_1memory__pool.html">memory_pool< PoolType, BlockOrRawAllocator ></a></td></tr>
<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">A stateful <a href="md_doc_concepts.html#concept_rawallocator">RawAllocator</a> that manages <a href="md_doc_concepts.html#concept_node">nodes</a> of fixed size. <a href="classfoonathan_1_1memory_1_1memory__pool.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classfoonathan_1_1memory_1_1allocator__traits_3_01memory__pool_3_01_pool_type_00_01_impl_raw_allocator_01_4_01_4.html">allocator_traits< memory_pool< PoolType, ImplRawAllocator > ></a></td></tr>
<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Specialization of the <a class="el" href="classfoonathan_1_1memory_1_1allocator__traits.html">allocator_traits</a> for <a class="el" href="classfoonathan_1_1memory_1_1memory__pool.html">memory_pool</a> classes. <a href="classfoonathan_1_1memory_1_1allocator__traits_3_01memory__pool_3_01_pool_type_00_01_impl_raw_allocator_01_4_01_4.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classfoonathan_1_1memory_1_1composable__allocator__traits_3_01memory__pool_3_01_pool_type_00_01_56d9b96e5c95a80e8643d831a5b55e1c.html">composable_allocator_traits< memory_pool< PoolType, BlockOrRawAllocator > ></a></td></tr>
<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Specialization of the <a class="el" href="classfoonathan_1_1memory_1_1composable__allocator__traits.html">composable_allocator_traits</a> for <a class="el" href="classfoonathan_1_1memory_1_1memory__pool.html">memory_pool</a> classes. <a href="classfoonathan_1_1memory_1_1composable__allocator__traits_3_01memory__pool_3_01_pool_type_00_01_56d9b96e5c95a80e8643d831a5b55e1c.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structfoonathan_1_1memory_1_1identity__buckets.html">identity_buckets</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">A <code>BucketDistribution</code> for <a class="el" href="classfoonathan_1_1memory_1_1memory__pool__collection.html">memory_pool_collection</a> defining that there is a bucket, i.e. <a href="structfoonathan_1_1memory_1_1identity__buckets.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structfoonathan_1_1memory_1_1log2__buckets.html">log2_buckets</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">A <code>BucketDistribution</code> for <a class="el" href="classfoonathan_1_1memory_1_1memory__pool__collection.html">memory_pool_collection</a> defining that there is a bucket, i.e. <a href="structfoonathan_1_1memory_1_1log2__buckets.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classfoonathan_1_1memory_1_1memory__pool__collection.html">memory_pool_collection< PoolType, BucketDistribution, BlockOrRawAllocator ></a></td></tr>
<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">A stateful <a href="md_doc_concepts.html#concept_rawallocator">RawAllocator</a> that behaves as a collection of multiple <a class="el" href="classfoonathan_1_1memory_1_1memory__pool.html">memory_pool</a> objects. <a href="classfoonathan_1_1memory_1_1memory__pool__collection.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classfoonathan_1_1memory_1_1bucket__allocator.html">bucket_allocator< PoolType, ImplAllocator ></a></td></tr>
<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">An alias for <a class="el" href="classfoonathan_1_1memory_1_1memory__pool__collection.html">memory_pool_collection</a> using the <a class="el" href="structfoonathan_1_1memory_1_1identity__buckets.html">identity_buckets</a> policy and a <code>PoolType</code> defaulting to <a class="el" href="structfoonathan_1_1memory_1_1node__pool.html">node_pool</a>. <a href="classfoonathan_1_1memory_1_1bucket__allocator.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classfoonathan_1_1memory_1_1allocator__traits_3_01memory__pool__collection_3_01_pool_00_01_buckef268525d95f2695d3a18eceb407fc153.html">allocator_traits< memory_pool_collection< Pool, BucketDist, RawAllocator > ></a></td></tr>
<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Specialization of the <a class="el" href="classfoonathan_1_1memory_1_1allocator__traits.html">allocator_traits</a> for <a class="el" href="classfoonathan_1_1memory_1_1memory__pool__collection.html">memory_pool_collection</a> classes. <a href="classfoonathan_1_1memory_1_1allocator__traits_3_01memory__pool__collection_3_01_pool_00_01_buckef268525d95f2695d3a18eceb407fc153.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classfoonathan_1_1memory_1_1composable__allocator__traits_3_01memory__pool__collection_3_01_poolf1a1d86df4b4a95001202ecd4d561909.html">composable_allocator_traits< memory_pool_collection< Pool, BucketDist, RawAllocator > ></a></td></tr>
<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Specialization of the <a class="el" href="classfoonathan_1_1memory_1_1composable__allocator__traits.html">composable_allocator_traits</a> for <a class="el" href="classfoonathan_1_1memory_1_1memory__pool__collection.html">memory_pool_collection</a> classes. <a href="classfoonathan_1_1memory_1_1composable__allocator__traits_3_01memory__pool__collection_3_01_poolf1a1d86df4b4a95001202ecd4d561909.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structfoonathan_1_1memory_1_1node__pool.html">node_pool</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Tag type defining a memory pool optimized for nodes. <a href="structfoonathan_1_1memory_1_1node__pool.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structfoonathan_1_1memory_1_1array__pool.html">array_pool</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Tag type defining a memory pool optimized for arrays. <a href="structfoonathan_1_1memory_1_1array__pool.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structfoonathan_1_1memory_1_1small__node__pool.html">small_node_pool</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Tag type defining a memory pool optimized for small nodes. <a href="structfoonathan_1_1memory_1_1small__node__pool.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classfoonathan_1_1memory_1_1memory__stack.html">memory_stack< BlockOrRawAllocator ></a></td></tr>
<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">A stateful <a href="md_doc_concepts.html#concept_rawallocator">RawAllocator</a> that provides stack-like (LIFO) allocations. <a href="classfoonathan_1_1memory_1_1memory__stack.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classfoonathan_1_1memory_1_1memory__stack__raii__unwind.html">memory_stack_raii_unwind< Stack ></a></td></tr>
<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Simple utility that automatically unwinds a <code>Stack</code> to a previously saved location. <a href="classfoonathan_1_1memory_1_1memory__stack__raii__unwind.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classfoonathan_1_1memory_1_1allocator__traits_3_01memory__stack_3_01_block_allocator_01_4_01_4.html">allocator_traits< memory_stack< BlockAllocator > ></a></td></tr>
<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Specialization of the <a class="el" href="classfoonathan_1_1memory_1_1allocator__traits.html">allocator_traits</a> for <a class="el" href="classfoonathan_1_1memory_1_1memory__stack.html">memory_stack</a> classes. <a href="classfoonathan_1_1memory_1_1allocator__traits_3_01memory__stack_3_01_block_allocator_01_4_01_4.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classfoonathan_1_1memory_1_1composable__allocator__traits_3_01memory__stack_3_01_block_allocator_01_4_01_4.html">composable_allocator_traits< memory_stack< BlockAllocator > ></a></td></tr>
<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Specialization of the <a class="el" href="classfoonathan_1_1memory_1_1composable__allocator__traits.html">composable_allocator_traits</a> for <a class="el" href="classfoonathan_1_1memory_1_1memory__stack.html">memory_stack</a> classes. <a href="classfoonathan_1_1memory_1_1composable__allocator__traits_3_01memory__stack_3_01_block_allocator_01_4_01_4.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classfoonathan_1_1memory_1_1null__allocator.html">null_allocator</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">A composable <a href="md_doc_concepts.html#concept_rawallocator">RawAllocator</a> that will always fail. <a href="classfoonathan_1_1memory_1_1null__allocator.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structfoonathan_1_1memory_1_1static__allocator__storage.html">static_allocator_storage< Size ></a></td></tr>
<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Storage for a <a class="el" href="classfoonathan_1_1memory_1_1static__allocator.html">static_allocator</a>. <a href="structfoonathan_1_1memory_1_1static__allocator__storage.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classfoonathan_1_1memory_1_1static__allocator.html">static_allocator</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">A stateful <a href="md_doc_concepts.html#concept_rawallocator">RawAllocator</a> that uses a fixed sized storage for the allocations. <a href="classfoonathan_1_1memory_1_1static__allocator.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classfoonathan_1_1memory_1_1static__block__allocator.html">static_block_allocator</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">A <a href="md_doc_concepts.html#concept_blockallocator">BlockAllocator</a> that allocates the blocks from a fixed size storage. <a href="classfoonathan_1_1memory_1_1static__block__allocator.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classfoonathan_1_1memory_1_1temporary__stack.html">temporary_stack</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">A wrapper around the <a class="el" href="classfoonathan_1_1memory_1_1memory__stack.html">memory_stack</a> that is used by the <a class="el" href="classfoonathan_1_1memory_1_1temporary__allocator.html">temporary_allocator</a>. <a href="classfoonathan_1_1memory_1_1temporary__stack.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classfoonathan_1_1memory_1_1temporary__allocator.html">temporary_allocator</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">A stateful <a href="md_doc_concepts.html#concept_rawallocator">RawAllocator</a> that handles temporary allocations. <a href="classfoonathan_1_1memory_1_1temporary__allocator.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classfoonathan_1_1memory_1_1allocator__traits_3_01temporary__allocator_01_4.html">allocator_traits< temporary_allocator ></a></td></tr>
<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Specialization of the <a class="el" href="classfoonathan_1_1memory_1_1allocator__traits.html">allocator_traits</a> for <a class="el" href="classfoonathan_1_1memory_1_1temporary__allocator.html">temporary_allocator</a> classes. <a href="classfoonathan_1_1memory_1_1allocator__traits_3_01temporary__allocator_01_4.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classfoonathan_1_1memory_1_1virtual__memory__allocator.html">virtual_memory_allocator</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">A stateless <a href="md_doc_concepts.html#concept_rawallocator">RawAllocator</a> that allocates memory using the virtual memory allocation functions. <a href="classfoonathan_1_1memory_1_1virtual__memory__allocator.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classfoonathan_1_1memory_1_1virtual__block__allocator.html">virtual_block_allocator</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">A <a href="md_doc_concepts.html#concept_blockallocator">BlockAllocator</a> that reserves virtual memory and commits it part by part. <a href="classfoonathan_1_1memory_1_1virtual__block__allocator.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
Macros</h2></td></tr>
<tr class="memitem:ga49bf0d04a94c18512ef2890157412b71"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__allocator.html#ga49bf0d04a94c18512ef2890157412b71">FOONATHAN_MEMORY_TEMPORARY_STACK_MODE</a></td></tr>
<tr class="memdesc:ga49bf0d04a94c18512ef2890157412b71"><td class="mdescLeft"> </td><td class="mdescRight">The mode of the automatic <a class="el" href="classfoonathan_1_1memory_1_1temporary__stack.html">foonathan::memory::temporary_stack</a> creation. <a href="group__allocator.html#ga49bf0d04a94c18512ef2890157412b71">More...</a><br /></td></tr>
<tr class="separator:ga49bf0d04a94c18512ef2890157412b71"><td class="memSeparator" colspan="2"> </td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
Typedefs</h2></td></tr>
<tr class="memitem:ga10acce2d854fc42fea7306e511d9cd10"><td class="memItemLeft" align="right" valign="top">using </td><td class="memItemRight" valign="bottom"><a class="el" href="group__allocator.html#ga10acce2d854fc42fea7306e511d9cd10">default_allocator</a> = FOONATHAN_IMPL_DEFINED(FOONATHAN_MEMORY_IMPL_DEFAULT_ALLOCATOR)</td></tr>
<tr class="memdesc:ga10acce2d854fc42fea7306e511d9cd10"><td class="mdescLeft"> </td><td class="mdescRight">The default <a href="md_doc_concepts.html#concept_rawallocator">RawAllocator</a> that will be used as <a href="md_doc_concepts.html#concept_blockallocator">BlockAllocator</a> in memory arenas. <a href="group__allocator.html#ga10acce2d854fc42fea7306e511d9cd10">More...</a><br /></td></tr>
<tr class="separator:ga10acce2d854fc42fea7306e511d9cd10"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ga22bca7a15392be2aa9be773d838ec4f4"><td class="memItemLeft" align="right" valign="top">using </td><td class="memItemRight" valign="bottom"><a class="el" href="group__allocator.html#ga22bca7a15392be2aa9be773d838ec4f4">heap_allocator</a> = FOONATHAN_IMPL_DEFINED(detail::lowlevel_allocator< detail::heap_allocator_impl >)</td></tr>
<tr class="memdesc:ga22bca7a15392be2aa9be773d838ec4f4"><td class="mdescLeft"> </td><td class="mdescRight">A stateless <a href="md_doc_concepts.html#concept_rawallocator">RawAllocator</a> that allocates memory from the heap. <a href="group__allocator.html#ga22bca7a15392be2aa9be773d838ec4f4">More...</a><br /></td></tr>
<tr class="separator:ga22bca7a15392be2aa9be773d838ec4f4"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ga68aa7bcdc0cdca86cc4da46d5ed16c16"><td class="memItemLeft" align="right" valign="top">using </td><td class="memItemRight" valign="bottom"><a class="el" href="group__allocator.html#ga68aa7bcdc0cdca86cc4da46d5ed16c16">malloc_allocator</a> = FOONATHAN_IMPL_DEFINED(detail::lowlevel_allocator< detail::malloc_allocator_impl >)</td></tr>
<tr class="memdesc:ga68aa7bcdc0cdca86cc4da46d5ed16c16"><td class="mdescLeft"> </td><td class="mdescRight">A stateless <a href="md_doc_concepts.html#concept_rawallocator">RawAllocator</a> that allocates memory using <code>std::malloc()</code>. <a href="group__allocator.html#ga68aa7bcdc0cdca86cc4da46d5ed16c16">More...</a><br /></td></tr>
<tr class="separator:ga68aa7bcdc0cdca86cc4da46d5ed16c16"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ga0203ba3d8ef46a65c504a6c98e3f7bb5"><td class="memItemLeft" align="right" valign="top">using </td><td class="memItemRight" valign="bottom"><a class="el" href="group__allocator.html#ga0203ba3d8ef46a65c504a6c98e3f7bb5">new_allocator</a> = FOONATHAN_IMPL_DEFINED(detail::lowlevel_allocator< detail::new_allocator_impl >)</td></tr>
<tr class="memdesc:ga0203ba3d8ef46a65c504a6c98e3f7bb5"><td class="mdescLeft"> </td><td class="mdescRight">A stateless <a href="md_doc_concepts.html#concept_rawallocator">RawAllocator</a> that allocates memory using (nothrow) <code>operator new</code>. <a href="group__allocator.html#ga0203ba3d8ef46a65c504a6c98e3f7bb5">More...</a><br /></td></tr>
<tr class="separator:ga0203ba3d8ef46a65c504a6c98e3f7bb5"><td class="memSeparator" colspan="2"> </td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:ga5885acea415a00882faec13d22978983"><td class="memItemLeft" align="right" valign="top">void * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__allocator.html#ga5885acea415a00882faec13d22978983">heap_alloc</a> (std::size_t size) noexcept</td></tr>
<tr class="memdesc:ga5885acea415a00882faec13d22978983"><td class="mdescLeft"> </td><td class="mdescRight">Allocates heap memory. <a href="group__allocator.html#ga5885acea415a00882faec13d22978983">More...</a><br /></td></tr>
<tr class="separator:ga5885acea415a00882faec13d22978983"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ga4b7f86f6fec61479a0014fd70f661a6c"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__allocator.html#ga4b7f86f6fec61479a0014fd70f661a6c">heap_dealloc</a> (void *ptr, std::size_t size) noexcept</td></tr>
<tr class="memdesc:ga4b7f86f6fec61479a0014fd70f661a6c"><td class="mdescLeft"> </td><td class="mdescRight">Deallocates heap memory. <a href="group__allocator.html#ga4b7f86f6fec61479a0014fd70f661a6c">More...</a><br /></td></tr>
<tr class="separator:ga4b7f86f6fec61479a0014fd70f661a6c"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:gaf5c93e4011951142ba923ce105fd2326"><td class="memItemLeft" align="right" valign="top">void * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__allocator.html#gaf5c93e4011951142ba923ce105fd2326">virtual_memory_reserve</a> (std::size_t no_pages) noexcept</td></tr>
<tr class="memdesc:gaf5c93e4011951142ba923ce105fd2326"><td class="mdescLeft"> </td><td class="mdescRight">Reserves virtual memory. <a href="group__allocator.html#gaf5c93e4011951142ba923ce105fd2326">More...</a><br /></td></tr>
<tr class="separator:gaf5c93e4011951142ba923ce105fd2326"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ga7ea785698aa5c576b390e5c61c265c77"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__allocator.html#ga7ea785698aa5c576b390e5c61c265c77">virtual_memory_release</a> (void *pages, std::size_t no_pages) noexcept</td></tr>
<tr class="memdesc:ga7ea785698aa5c576b390e5c61c265c77"><td class="mdescLeft"> </td><td class="mdescRight">Releases reserved virtual memory. <a href="group__allocator.html#ga7ea785698aa5c576b390e5c61c265c77">More...</a><br /></td></tr>
<tr class="separator:ga7ea785698aa5c576b390e5c61c265c77"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ga611ec17550bb9442b14ba7a25d2dcf92"><td class="memItemLeft" align="right" valign="top">void * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__allocator.html#ga611ec17550bb9442b14ba7a25d2dcf92">virtual_memory_commit</a> (void *memory, std::size_t no_pages) noexcept</td></tr>
<tr class="memdesc:ga611ec17550bb9442b14ba7a25d2dcf92"><td class="mdescLeft"> </td><td class="mdescRight">Commits reserved virtual memory. <a href="group__allocator.html#ga611ec17550bb9442b14ba7a25d2dcf92">More...</a><br /></td></tr>
<tr class="separator:ga611ec17550bb9442b14ba7a25d2dcf92"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ga10952511b7b0b9e0b536b92044727d45"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__allocator.html#ga10952511b7b0b9e0b536b92044727d45">virtual_memory_decommit</a> (void *memory, std::size_t no_pages) noexcept</td></tr>
<tr class="memdesc:ga10952511b7b0b9e0b536b92044727d45"><td class="mdescLeft"> </td><td class="mdescRight">Decommits commited virtual memory. <a href="group__allocator.html#ga10952511b7b0b9e0b536b92044727d45">More...</a><br /></td></tr>
<tr class="separator:ga10952511b7b0b9e0b536b92044727d45"><td class="memSeparator" colspan="2"> </td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="var-members"></a>
Variables</h2></td></tr>
<tr class="memitem:gafee5129a1877dc067703d7b24d00035c"><td class="memItemLeft" align="right" valign="top">const std::size_t </td><td class="memItemRight" valign="bottom"><a class="el" href="group__allocator.html#gafee5129a1877dc067703d7b24d00035c">virtual_memory_page_size</a></td></tr>
<tr class="memdesc:gafee5129a1877dc067703d7b24d00035c"><td class="mdescLeft"> </td><td class="mdescRight">The page size of the virtual memory. <a href="group__allocator.html#gafee5129a1877dc067703d7b24d00035c">More...</a><br /></td></tr>
<tr class="separator:gafee5129a1877dc067703d7b24d00035c"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ga13b9742afba50b1e299a7859e48179f2"><td class="memTemplParams" colspan="2">template<typename T , class RawAllocator , typename... Args> </td></tr>
<tr class="memitem:ga13b9742afba50b1e299a7859e48179f2"><td class="memTemplItemLeft" align="right" valign="top">auto </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__allocator.html#ga13b9742afba50b1e299a7859e48179f2">allocate_joint</a> (RawAllocator &alloc, <a class="el" href="structfoonathan_1_1memory_1_1joint__size.html">joint_size</a> additional_size, Args &&... args) -> <a class="el" href="classfoonathan_1_1memory_1_1joint__ptr.html">joint_ptr</a>< T, RawAllocator ></td></tr>
<tr class="separator:ga13b9742afba50b1e299a7859e48179f2"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ga23a73bb81e40d5e27542b41fa6ab619c"><td class="memTemplParams" colspan="2">template<typename T , class RawAllocator , typename... Args> </td></tr>
<tr class="memitem:ga23a73bb81e40d5e27542b41fa6ab619c"><td class="memTemplItemLeft" align="right" valign="top">auto </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__allocator.html#ga23a73bb81e40d5e27542b41fa6ab619c">allocate_joint</a> (const RawAllocator &alloc, <a class="el" href="structfoonathan_1_1memory_1_1joint__size.html">joint_size</a> additional_size, Args &&... args) -> <a class="el" href="classfoonathan_1_1memory_1_1joint__ptr.html">joint_ptr</a>< T, RawAllocator ></td></tr>
<tr class="separator:ga23a73bb81e40d5e27542b41fa6ab619c"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ga182bd65294ca3e2609ace4bfce2c91cb"><td class="memTemplParams" colspan="2">template<class RawAllocator , typename T > </td></tr>
<tr class="memitem:ga182bd65294ca3e2609ace4bfce2c91cb"><td class="memTemplItemLeft" align="right" valign="top">auto </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__allocator.html#ga182bd65294ca3e2609ace4bfce2c91cb">clone_joint</a> (RawAllocator &alloc, const <a class="el" href="classfoonathan_1_1memory_1_1joint__type.html">joint_type</a>< T > &<a class="el" href="classfoonathan_1_1memory_1_1joint.html">joint</a>) -> <a class="el" href="classfoonathan_1_1memory_1_1joint__ptr.html">joint_ptr</a>< T, RawAllocator ></td></tr>
<tr class="separator:ga182bd65294ca3e2609ace4bfce2c91cb"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ga2e2cfaead9685db012eb0655e45f81d5"><td class="memTemplParams" colspan="2">template<class RawAllocator , typename T > </td></tr>
<tr class="memitem:ga2e2cfaead9685db012eb0655e45f81d5"><td class="memTemplItemLeft" align="right" valign="top">auto </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__allocator.html#ga2e2cfaead9685db012eb0655e45f81d5">clone_joint</a> (const RawAllocator &alloc, const <a class="el" href="classfoonathan_1_1memory_1_1joint__type.html">joint_type</a>< T > &<a class="el" href="classfoonathan_1_1memory_1_1joint.html">joint</a>) -> <a class="el" href="classfoonathan_1_1memory_1_1joint__ptr.html">joint_ptr</a>< T, RawAllocator ></td></tr>
<tr class="separator:ga2e2cfaead9685db012eb0655e45f81d5"><td class="memSeparator" colspan="2"> </td></tr>
</table>
<h2 class="groupheader">Defines</h2>
<a id="ga49bf0d04a94c18512ef2890157412b71"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga49bf0d04a94c18512ef2890157412b71">◆ </a></span>FOONATHAN_MEMORY_TEMPORARY_STACK_MODE</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define FOONATHAN_MEMORY_TEMPORARY_STACK_MODE</td>
</tr>
</table>
</div><div class="memdoc">
<p>The mode of the automatic <a class="el" href="classfoonathan_1_1memory_1_1temporary__stack.html">foonathan::memory::temporary_stack</a> creation. </p>
<p>Set to <code>2</code> to enable automatic lifetime management of the per-thread stack through nifty counter. Then all memory will be freed upon program termination automatically. Set to <code>1</code> to disable automatic lifetime managment of the per-thread stack, requires managing it through the <a class="el" href="classfoonathan_1_1memory_1_1temporary__stack__initializer.html">foonathan::memory::temporary_stack_initializer</a>. Set to <code>0</code> to disable the per-thread stack completely. <a class="el" href="classfoonathan_1_1memory_1_1temporary__stack.html#a7f311d60d4857926d16396fc6a3be15a">get_temporary_stack()</a> will abort the program upon call. </p>
</div>
</div>
<h2 class="groupheader">Typedefs</h2>
<a id="ga10acce2d854fc42fea7306e511d9cd10"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga10acce2d854fc42fea7306e511d9cd10">◆ </a></span>default_allocator</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">using <a class="el" href="group__allocator.html#ga10acce2d854fc42fea7306e511d9cd10">default_allocator</a> = FOONATHAN_IMPL_DEFINED(FOONATHAN_MEMORY_IMPL_DEFAULT_ALLOCATOR)</td>
</tr>
</table>
</div><div class="memdoc">
<p>The default <a href="md_doc_concepts.html#concept_rawallocator">RawAllocator</a> that will be used as <a href="md_doc_concepts.html#concept_blockallocator">BlockAllocator</a> in memory arenas. </p>
<p>Arena allocators like <a class="el" href="classfoonathan_1_1memory_1_1memory__stack.html">memory_stack</a> or <a class="el" href="classfoonathan_1_1memory_1_1memory__pool.html">memory_pool</a> allocate memory by subdividing a huge block. They get a <a href="md_doc_concepts.html#concept_blockallocator">BlockAllocator</a> that will be used for their internal allocation, this type is the default value. </p><dl class="section user"><dt>Required Behavior:</dt><dd>Its type can be changed via the CMake option <code>FOONATHAN_MEMORY_DEFAULT_ALLCOATOR</code>, but it must be one of the following: <a class="el" href="group__allocator.html#ga22bca7a15392be2aa9be773d838ec4f4">heap_allocator</a>, <a class="el" href="group__allocator.html#ga0203ba3d8ef46a65c504a6c98e3f7bb5">new_allocator</a>, <a class="el" href="group__allocator.html#ga68aa7bcdc0cdca86cc4da46d5ed16c16">malloc_allocator</a>, <a class="el" href="classfoonathan_1_1memory_1_1static__allocator.html">static_allocator</a>, <a class="el" href="classfoonathan_1_1memory_1_1virtual__memory__allocator.html">virtual_memory_allocator</a>. </dd></dl>
<dl class="section user"><dt>Default Behavior:</dt><dd>The default is <a class="el" href="group__allocator.html#ga22bca7a15392be2aa9be773d838ec4f4">heap_allocator</a>. </dd></dl>
</div>
</div>
<a id="ga22bca7a15392be2aa9be773d838ec4f4"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga22bca7a15392be2aa9be773d838ec4f4">◆ </a></span>heap_allocator</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">using <a class="el" href="group__allocator.html#ga22bca7a15392be2aa9be773d838ec4f4">heap_allocator</a> = FOONATHAN_IMPL_DEFINED(detail::lowlevel_allocator<detail::heap_allocator_impl>)</td>
</tr>
</table>
</div><div class="memdoc">
<p>A stateless <a href="md_doc_concepts.html#concept_rawallocator">RawAllocator</a> that allocates memory from the heap. </p>
<p>It uses the two functions <a class="el" href="group__allocator.html#ga5885acea415a00882faec13d22978983">heap_alloc</a> and <a class="el" href="group__allocator.html#ga4b7f86f6fec61479a0014fd70f661a6c">heap_dealloc</a> for the allocation, which default to <code>std::malloc</code> and <code>std::free</code>. </p>
</div>
</div>
<a id="ga68aa7bcdc0cdca86cc4da46d5ed16c16"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga68aa7bcdc0cdca86cc4da46d5ed16c16">◆ </a></span>malloc_allocator</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">using <a class="el" href="group__allocator.html#ga68aa7bcdc0cdca86cc4da46d5ed16c16">malloc_allocator</a> = FOONATHAN_IMPL_DEFINED(detail::lowlevel_allocator<detail::malloc_allocator_impl>)</td>
</tr>
</table>
</div><div class="memdoc">
<p>A stateless <a href="md_doc_concepts.html#concept_rawallocator">RawAllocator</a> that allocates memory using <code>std::malloc()</code>. </p>
<p>It throws <a class="el" href="classfoonathan_1_1memory_1_1out__of__memory.html">out_of_memory</a> when the allocation fails. </p>
</div>
</div>
<a id="ga0203ba3d8ef46a65c504a6c98e3f7bb5"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga0203ba3d8ef46a65c504a6c98e3f7bb5">◆ </a></span>new_allocator</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">using <a class="el" href="group__allocator.html#ga0203ba3d8ef46a65c504a6c98e3f7bb5">new_allocator</a> = FOONATHAN_IMPL_DEFINED(detail::lowlevel_allocator<detail::new_allocator_impl>)</td>
</tr>
</table>
</div><div class="memdoc">
<p>A stateless <a href="md_doc_concepts.html#concept_rawallocator">RawAllocator</a> that allocates memory using (nothrow) <code>operator new</code>. </p>
<p>If the operator returns <code>nullptr</code>, it behaves like <code>new</code> and loops calling <code>std::new_handler</code>, but instead of throwing a <code>std::bad_alloc</code> exception, it throws <a class="el" href="classfoonathan_1_1memory_1_1out__of__memory.html">out_of_memory</a>. </p>
</div>
</div>
<h2 class="groupheader">Functions</h2>
<a id="ga5885acea415a00882faec13d22978983"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga5885acea415a00882faec13d22978983">◆ </a></span>heap_alloc()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void* foonathan::memory::heap_alloc </td>
<td>(</td>
<td class="paramtype">std::size_t </td>
<td class="paramname"><em>size</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">noexcept</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Allocates heap memory. </p>
<p>This function is used by the <a class="el" href="group__allocator.html#ga22bca7a15392be2aa9be773d838ec4f4">heap_allocator</a> to allocate the heap memory. It is not defined on a freestanding implementation, a definition must be provided by the library user. </p><dl class="section user"><dt>Required Behavior:</dt><dd>This function shall return a block of uninitialized memory that is aligned for <code>max_align_t</code> and has the given size. The size parameter will not be zero. It shall return a <code>nullptr</code> if no memory is available. It must be thread safe. </dd></dl>
<dl class="section user"><dt>Default Behavior:</dt><dd>On a hosted implementation this function uses OS specific facilities, <code>std::malloc</code> is used as fallback. </dd></dl>
</div>
</div>
<a id="ga4b7f86f6fec61479a0014fd70f661a6c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga4b7f86f6fec61479a0014fd70f661a6c">◆ </a></span>heap_dealloc()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void foonathan::memory::heap_dealloc </td>
<td>(</td>
<td class="paramtype">void * </td>
<td class="paramname"><em>ptr</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::size_t </td>
<td class="paramname"><em>size</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">noexcept</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Deallocates heap memory. </p>
<p>This function is used by the <a class="el" href="group__allocator.html#ga22bca7a15392be2aa9be773d838ec4f4">heap_allocator</a> to allocate the heap memory. It is not defined on a freestanding implementation, a definition must be provided by the library user. </p><dl class="section user"><dt>Required Behavior:</dt><dd>This function gets a pointer from a previous call to <a class="el" href="group__allocator.html#ga5885acea415a00882faec13d22978983">heap_alloc</a> with the same size. It shall free the memory. The pointer will not be zero. It must be thread safe. </dd></dl>
<dl class="section user"><dt>Default Behavior:</dt><dd>On a hosted implementation this function uses OS specific facilities, <code>std::free</code> is used as fallback. </dd></dl>
</div>
</div>
<a id="ga13b9742afba50b1e299a7859e48179f2"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga13b9742afba50b1e299a7859e48179f2">◆ </a></span>allocate_joint() <span class="overload">[1/2]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">auto allocate_joint </td>
<td>(</td>
<td class="paramtype">RawAllocator & </td>
<td class="paramname"><em>alloc</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structfoonathan_1_1memory_1_1joint__size.html">joint_size</a> </td>
<td class="paramname"><em>additional_size</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">Args &&... </td>
<td class="paramname"><em>args</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td> -> <a class="el" href="classfoonathan_1_1memory_1_1joint__ptr.html">joint_ptr</a><T, RawAllocator>
</td>
</tr>
</table>
</div><div class="memdoc">
<dl class="section user"><dt>Returns:</dt><dd>A new <a class="el" href="classfoonathan_1_1memory_1_1joint__ptr.html">joint_ptr</a> as if created with the same arguments passed to the constructor. </dd></dl>
</div>
</div>
<a id="ga182bd65294ca3e2609ace4bfce2c91cb"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga182bd65294ca3e2609ace4bfce2c91cb">◆ </a></span>clone_joint() <span class="overload">[1/2]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">auto foonathan::memory::clone_joint </td>
<td>(</td>
<td class="paramtype">RawAllocator & </td>
<td class="paramname"><em>alloc</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classfoonathan_1_1memory_1_1joint__type.html">joint_type</a>< T > & </td>
<td class="paramname"><em>joint</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td> -> <a class="el" href="classfoonathan_1_1memory_1_1joint__ptr.html">joint_ptr</a><T, RawAllocator>
</td>
</tr>
</table>
</div><div class="memdoc">
<dl class="section user"><dt>Returns:</dt><dd>A new <a class="el" href="classfoonathan_1_1memory_1_1joint__ptr.html">joint_ptr</a> that points to a copy of <code>joint</code>. It will allocate as much memory as needed and forward to the copy constructor. </dd></dl>
</div>
</div>
<a id="gaf5c93e4011951142ba923ce105fd2326"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gaf5c93e4011951142ba923ce105fd2326">◆ </a></span>virtual_memory_reserve()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void* foonathan::memory::virtual_memory_reserve </td>
<td>(</td>
<td class="paramtype">std::size_t </td>
<td class="paramname"><em>no_pages</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">noexcept</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Reserves virtual memory. </p>
<dl class="section user"><dt>Effects:</dt><dd>Reserves the given number of pages. Each page is <a class="el" href="group__allocator.html#gafee5129a1877dc067703d7b24d00035c">virtual_memory_page_size</a> big. </dd></dl>
<dl class="section user"><dt>Returns:</dt><dd>The address of the first reserved page, or <code>nullptr</code> in case of error. </dd></dl>
<dl class="section note"><dt>Note</dt><dd>The memory may not be used, it must first be commited. </dd></dl>
</div>
</div>
<a id="ga7ea785698aa5c576b390e5c61c265c77"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga7ea785698aa5c576b390e5c61c265c77">◆ </a></span>virtual_memory_release()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void foonathan::memory::virtual_memory_release </td>
<td>(</td>
<td class="paramtype">void * </td>
<td class="paramname"><em>pages</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::size_t </td>
<td class="paramname"><em>no_pages</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">noexcept</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Releases reserved virtual memory. </p>
<dl class="section user"><dt>Effects:</dt><dd>Returns previously reserved pages to the system. </dd></dl>
<dl class="section user"><dt>Requires:</dt><dd><code>pages</code> must come from a previous call to <a class="el" href="group__allocator.html#gaf5c93e4011951142ba923ce105fd2326">virtual_memory_reserve</a> with the same <code>calc_no_pages</code>, it must not be <code>nullptr</code>. </dd></dl>
</div>
</div>
<a id="ga611ec17550bb9442b14ba7a25d2dcf92"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga611ec17550bb9442b14ba7a25d2dcf92">◆ </a></span>virtual_memory_commit()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void* foonathan::memory::virtual_memory_commit </td>
<td>(</td>
<td class="paramtype">void * </td>
<td class="paramname"><em>memory</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::size_t </td>
<td class="paramname"><em>no_pages</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">noexcept</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Commits reserved virtual memory. </p>
<dl class="section user"><dt>Effects:</dt><dd>Marks <code>calc_no_pages</code> pages starting at the given address available for use. </dd></dl>
<dl class="section user"><dt>Returns:</dt><dd>The beginning of the committed area, i.e. <code>memory</code>, or <code>nullptr</code> in case of error. </dd></dl>
<dl class="section user"><dt>Requires:</dt><dd>The memory must be previously reserved. </dd></dl>
</div>
</div>
<a id="ga10952511b7b0b9e0b536b92044727d45"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga10952511b7b0b9e0b536b92044727d45">◆ </a></span>virtual_memory_decommit()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void foonathan::memory::virtual_memory_decommit </td>
<td>(</td>
<td class="paramtype">void * </td>
<td class="paramname"><em>memory</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::size_t </td>
<td class="paramname"><em>no_pages</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">noexcept</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Decommits commited virtual memory. </p>
<dl class="section user"><dt>Effects:</dt><dd>Puts commited memory back in the reserved state. </dd></dl>
<dl class="section user"><dt>Requires:</dt><dd><code>memory</code> must come from a previous call to <a class="el" href="group__allocator.html#ga611ec17550bb9442b14ba7a25d2dcf92">virtual_memory_commit</a> with the same <code>calc_no_pages</code> it must not be <code>nullptr</code>. </dd></dl>
</div>
</div>
<a id="ga23a73bb81e40d5e27542b41fa6ab619c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga23a73bb81e40d5e27542b41fa6ab619c">◆ </a></span>allocate_joint() <span class="overload">[2/2]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">auto foonathan::memory::allocate_joint </td>
<td>(</td>
<td class="paramtype">const RawAllocator & </td>
<td class="paramname"><em>alloc</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structfoonathan_1_1memory_1_1joint__size.html">joint_size</a> </td>
<td class="paramname"><em>additional_size</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">Args &&... </td>
<td class="paramname"><em>args</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td> -> <a class="el" href="classfoonathan_1_1memory_1_1joint__ptr.html">joint_ptr</a><T, RawAllocator>
</td>
</tr>
</table>
</div><div class="memdoc">
<dl class="section user"><dt>Returns:</dt><dd>A new <a class="el" href="classfoonathan_1_1memory_1_1joint__ptr.html">joint_ptr</a> as if created with the same arguments passed to the constructor. </dd></dl>
</div>
</div>
<a id="ga2e2cfaead9685db012eb0655e45f81d5"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga2e2cfaead9685db012eb0655e45f81d5">◆ </a></span>clone_joint() <span class="overload">[2/2]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">auto foonathan::memory::clone_joint </td>
<td>(</td>
<td class="paramtype">const RawAllocator & </td>
<td class="paramname"><em>alloc</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classfoonathan_1_1memory_1_1joint__type.html">joint_type</a>< T > & </td>
<td class="paramname"><em>joint</em> </td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td> -> <a class="el" href="classfoonathan_1_1memory_1_1joint__ptr.html">joint_ptr</a><T, RawAllocator>
</td>
</tr>
</table>
</div><div class="memdoc">
<dl class="section user"><dt>Returns:</dt><dd>A new <a class="el" href="classfoonathan_1_1memory_1_1joint__ptr.html">joint_ptr</a> that points to a copy of <code>joint</code>. It will allocate as much memory as needed and forward to the copy constructor. </dd></dl>
</div>
</div>
<h2 class="groupheader">Variable Documentation</h2>
<a id="gafee5129a1877dc067703d7b24d00035c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gafee5129a1877dc067703d7b24d00035c">◆ </a></span>virtual_memory_page_size</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">const std::size_t virtual_memory_page_size</td>
</tr>
</table>
</div><div class="memdoc">
<p>The page size of the virtual memory. </p>
<p>All virtual memory allocations must be multiple of this size. It is usually 4KiB. </p>
</div>
</div>
</div><!-- contents -->
<!-- HTML footer for doxygen 1.8.16-->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by  <a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.18
</small></address>
</body>
</html>
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。