1 Star 0 Fork 0

mobangjack / memory

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
group__allocator.html 61.10 KB
一键复制 编辑 原始数据 按行查看 历史
Jonathan Müller 提交于 2020-05-05 17:04 . Update documentation
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696
<!-- 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> &#124;
<a href="#define-members">Macros</a> &#124;
<a href="#typedef-members">Typedefs</a> &#124;
<a href="#func-members">Functions</a> &#124;
<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 &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classfoonathan_1_1memory_1_1iteration__allocator.html">iteration_allocator&lt; N, BlockOrRawAllocator &gt;</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</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">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classfoonathan_1_1memory_1_1double__frame__allocator.html">double_frame_allocator&lt; BlockOrRawAllocator &gt;</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</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">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</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&lt; iteration_allocator&lt; N, BlockAllocator &gt; &gt;</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</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">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</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&lt; iteration_allocator&lt; N, BlockAllocator &gt; &gt;</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</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">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</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">&#160;</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">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</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">&#160;</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">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classfoonathan_1_1memory_1_1joint__type.html">joint_type&lt; T &gt;</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</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">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classfoonathan_1_1memory_1_1joint__ptr.html">joint_ptr&lt; T, RawAllocator &gt;</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</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">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</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">&#160;</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">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</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&lt; joint_allocator &gt;</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</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">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structfoonathan_1_1memory_1_1propagation__traits_3_01joint__allocator_01_4.html">propagation_traits&lt; joint_allocator &gt;</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</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">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classfoonathan_1_1memory_1_1joint__array.html">joint_array&lt; T &gt;</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</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">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classfoonathan_1_1memory_1_1memory__pool.html">memory_pool&lt; PoolType, BlockOrRawAllocator &gt;</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</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">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</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&lt; memory_pool&lt; PoolType, ImplRawAllocator &gt; &gt;</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</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">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</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&lt; memory_pool&lt; PoolType, BlockOrRawAllocator &gt; &gt;</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</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">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</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">&#160;</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">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</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">&#160;</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">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classfoonathan_1_1memory_1_1memory__pool__collection.html">memory_pool_collection&lt; PoolType, BucketDistribution, BlockOrRawAllocator &gt;</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</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">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classfoonathan_1_1memory_1_1bucket__allocator.html">bucket_allocator&lt; PoolType, ImplAllocator &gt;</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</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">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</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&lt; memory_pool_collection&lt; Pool, BucketDist, RawAllocator &gt; &gt;</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</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">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</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&lt; memory_pool_collection&lt; Pool, BucketDist, RawAllocator &gt; &gt;</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</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">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</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">&#160;</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">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</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">&#160;</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">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</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">&#160;</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">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classfoonathan_1_1memory_1_1memory__stack.html">memory_stack&lt; BlockOrRawAllocator &gt;</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</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">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classfoonathan_1_1memory_1_1memory__stack__raii__unwind.html">memory_stack_raii_unwind&lt; Stack &gt;</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</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">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</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&lt; memory_stack&lt; BlockAllocator &gt; &gt;</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</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">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</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&lt; memory_stack&lt; BlockAllocator &gt; &gt;</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</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">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</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">&#160;</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">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structfoonathan_1_1memory_1_1static__allocator__storage.html">static_allocator_storage&lt; Size &gt;</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</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">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</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">&#160;</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">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</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">&#160;</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">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</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">&#160;</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">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</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">&#160;</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">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classfoonathan_1_1memory_1_1allocator__traits_3_01temporary__allocator_01_4.html">allocator_traits&lt; temporary_allocator &gt;</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</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">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</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">&#160;</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">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</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">&#160;</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">&#160;</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&#160;</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">&#160;</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">&#160;</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&#160;</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">&#160;</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">&#160;</td></tr>
<tr class="memitem:ga22bca7a15392be2aa9be773d838ec4f4"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__allocator.html#ga22bca7a15392be2aa9be773d838ec4f4">heap_allocator</a> = FOONATHAN_IMPL_DEFINED(detail::lowlevel_allocator&lt; detail::heap_allocator_impl &gt;)</td></tr>
<tr class="memdesc:ga22bca7a15392be2aa9be773d838ec4f4"><td class="mdescLeft">&#160;</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">&#160;</td></tr>
<tr class="memitem:ga68aa7bcdc0cdca86cc4da46d5ed16c16"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__allocator.html#ga68aa7bcdc0cdca86cc4da46d5ed16c16">malloc_allocator</a> = FOONATHAN_IMPL_DEFINED(detail::lowlevel_allocator&lt; detail::malloc_allocator_impl &gt;)</td></tr>
<tr class="memdesc:ga68aa7bcdc0cdca86cc4da46d5ed16c16"><td class="mdescLeft">&#160;</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">&#160;</td></tr>
<tr class="memitem:ga0203ba3d8ef46a65c504a6c98e3f7bb5"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__allocator.html#ga0203ba3d8ef46a65c504a6c98e3f7bb5">new_allocator</a> = FOONATHAN_IMPL_DEFINED(detail::lowlevel_allocator&lt; detail::new_allocator_impl &gt;)</td></tr>
<tr class="memdesc:ga0203ba3d8ef46a65c504a6c98e3f7bb5"><td class="mdescLeft">&#160;</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">&#160;</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 *&#160;</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">&#160;</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">&#160;</td></tr>
<tr class="memitem:ga4b7f86f6fec61479a0014fd70f661a6c"><td class="memItemLeft" align="right" valign="top">void&#160;</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">&#160;</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">&#160;</td></tr>
<tr class="memitem:gaf5c93e4011951142ba923ce105fd2326"><td class="memItemLeft" align="right" valign="top">void *&#160;</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">&#160;</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">&#160;</td></tr>
<tr class="memitem:ga7ea785698aa5c576b390e5c61c265c77"><td class="memItemLeft" align="right" valign="top">void&#160;</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">&#160;</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">&#160;</td></tr>
<tr class="memitem:ga611ec17550bb9442b14ba7a25d2dcf92"><td class="memItemLeft" align="right" valign="top">void *&#160;</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">&#160;</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">&#160;</td></tr>
<tr class="memitem:ga10952511b7b0b9e0b536b92044727d45"><td class="memItemLeft" align="right" valign="top">void&#160;</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">&#160;</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">&#160;</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&#160;</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">&#160;</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">&#160;</td></tr>
<tr class="memitem:ga13b9742afba50b1e299a7859e48179f2"><td class="memTemplParams" colspan="2">template&lt;typename T , class RawAllocator , typename... Args&gt; </td></tr>
<tr class="memitem:ga13b9742afba50b1e299a7859e48179f2"><td class="memTemplItemLeft" align="right" valign="top">auto&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__allocator.html#ga13b9742afba50b1e299a7859e48179f2">allocate_joint</a> (RawAllocator &amp;alloc, <a class="el" href="structfoonathan_1_1memory_1_1joint__size.html">joint_size</a> additional_size, Args &amp;&amp;... args) -&gt; <a class="el" href="classfoonathan_1_1memory_1_1joint__ptr.html">joint_ptr</a>&lt; T, RawAllocator &gt;</td></tr>
<tr class="separator:ga13b9742afba50b1e299a7859e48179f2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga23a73bb81e40d5e27542b41fa6ab619c"><td class="memTemplParams" colspan="2">template&lt;typename T , class RawAllocator , typename... Args&gt; </td></tr>
<tr class="memitem:ga23a73bb81e40d5e27542b41fa6ab619c"><td class="memTemplItemLeft" align="right" valign="top">auto&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__allocator.html#ga23a73bb81e40d5e27542b41fa6ab619c">allocate_joint</a> (const RawAllocator &amp;alloc, <a class="el" href="structfoonathan_1_1memory_1_1joint__size.html">joint_size</a> additional_size, Args &amp;&amp;... args) -&gt; <a class="el" href="classfoonathan_1_1memory_1_1joint__ptr.html">joint_ptr</a>&lt; T, RawAllocator &gt;</td></tr>
<tr class="separator:ga23a73bb81e40d5e27542b41fa6ab619c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga182bd65294ca3e2609ace4bfce2c91cb"><td class="memTemplParams" colspan="2">template&lt;class RawAllocator , typename T &gt; </td></tr>
<tr class="memitem:ga182bd65294ca3e2609ace4bfce2c91cb"><td class="memTemplItemLeft" align="right" valign="top">auto&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__allocator.html#ga182bd65294ca3e2609ace4bfce2c91cb">clone_joint</a> (RawAllocator &amp;alloc, const <a class="el" href="classfoonathan_1_1memory_1_1joint__type.html">joint_type</a>&lt; T &gt; &amp;<a class="el" href="classfoonathan_1_1memory_1_1joint.html">joint</a>) -&gt; <a class="el" href="classfoonathan_1_1memory_1_1joint__ptr.html">joint_ptr</a>&lt; T, RawAllocator &gt;</td></tr>
<tr class="separator:ga182bd65294ca3e2609ace4bfce2c91cb"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga2e2cfaead9685db012eb0655e45f81d5"><td class="memTemplParams" colspan="2">template&lt;class RawAllocator , typename T &gt; </td></tr>
<tr class="memitem:ga2e2cfaead9685db012eb0655e45f81d5"><td class="memTemplItemLeft" align="right" valign="top">auto&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__allocator.html#ga2e2cfaead9685db012eb0655e45f81d5">clone_joint</a> (const RawAllocator &amp;alloc, const <a class="el" href="classfoonathan_1_1memory_1_1joint__type.html">joint_type</a>&lt; T &gt; &amp;<a class="el" href="classfoonathan_1_1memory_1_1joint.html">joint</a>) -&gt; <a class="el" href="classfoonathan_1_1memory_1_1joint__ptr.html">joint_ptr</a>&lt; T, RawAllocator &gt;</td></tr>
<tr class="separator:ga2e2cfaead9685db012eb0655e45f81d5"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<h2 class="groupheader">Defines</h2>
<a id="ga49bf0d04a94c18512ef2890157412b71"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga49bf0d04a94c18512ef2890157412b71">&#9670;&nbsp;</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">&#9670;&nbsp;</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">&#9670;&nbsp;</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&lt;detail::heap_allocator_impl&gt;)</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">&#9670;&nbsp;</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&lt;detail::malloc_allocator_impl&gt;)</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">&#9670;&nbsp;</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&lt;detail::new_allocator_impl&gt;)</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">&#9670;&nbsp;</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&#160;</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">&#9670;&nbsp;</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 *&#160;</td>
<td class="paramname"><em>ptr</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::size_t&#160;</td>
<td class="paramname"><em>size</em>&#160;</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">&#9670;&nbsp;</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 &amp;&#160;</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>&#160;</td>
<td class="paramname"><em>additional_size</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">Args &amp;&amp;...&#160;</td>
<td class="paramname"><em>args</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td> -&gt; <a class="el" href="classfoonathan_1_1memory_1_1joint__ptr.html">joint_ptr</a>&lt;T, RawAllocator&gt;
</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">&#9670;&nbsp;</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 &amp;&#160;</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>&lt; T &gt; &amp;&#160;</td>
<td class="paramname"><em>joint</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td> -&gt; <a class="el" href="classfoonathan_1_1memory_1_1joint__ptr.html">joint_ptr</a>&lt;T, RawAllocator&gt;
</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">&#9670;&nbsp;</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&#160;</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">&#9670;&nbsp;</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 *&#160;</td>
<td class="paramname"><em>pages</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::size_t&#160;</td>
<td class="paramname"><em>no_pages</em>&#160;</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">&#9670;&nbsp;</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 *&#160;</td>
<td class="paramname"><em>memory</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::size_t&#160;</td>
<td class="paramname"><em>no_pages</em>&#160;</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">&#9670;&nbsp;</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 *&#160;</td>
<td class="paramname"><em>memory</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::size_t&#160;</td>
<td class="paramname"><em>no_pages</em>&#160;</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">&#9670;&nbsp;</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 &amp;&#160;</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>&#160;</td>
<td class="paramname"><em>additional_size</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">Args &amp;&amp;...&#160;</td>
<td class="paramname"><em>args</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td> -&gt; <a class="el" href="classfoonathan_1_1memory_1_1joint__ptr.html">joint_ptr</a>&lt;T, RawAllocator&gt;
</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">&#9670;&nbsp;</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 &amp;&#160;</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>&lt; T &gt; &amp;&#160;</td>
<td class="paramname"><em>joint</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td> -&gt; <a class="el" href="classfoonathan_1_1memory_1_1joint__ptr.html">joint_ptr</a>&lt;T, RawAllocator&gt;
</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">&#9670;&nbsp;</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 &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.18
</small></address>
</body>
</html>
1
https://gitee.com/mobangjack/memory.git
git@gitee.com:mobangjack/memory.git
mobangjack
memory
memory
gh-pages

搜索帮助