Files
dl/document/html/dl__memory__pool_8h_source.html
2026-09-16 14:07:40 +08:00

435 lines
62 KiB
HTML
Vendored
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!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" lang="zh">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.13.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>dl: D:/dl/dl/memory/dl_memory_pool.h 源文件</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>
<script type="text/javascript" src="clipboard.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.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 id="projectrow">
<td id="projectalign">
<div id="projectname">dl
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- 制作者 Doxygen 1.13.1 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { codefold.init(0); });
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',false,false,'search.php','搜索',false);
});
/* @license-end */
</script>
<div id="main-nav"></div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function(){ initResizable(false); });
/* @license-end */
</script>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_17297ffb27ce571941f5fb5008f01a1f.html">dl</a></li><li class="navelem"><a class="el" href="dir_880cbdb7e19477dab0ac315d644729fb.html">memory</a></li> </ul>
</div>
</div><!-- top -->
<div id="doc-content">
<div class="header">
<div class="headertitle"><div class="title">dl_memory_pool.h</div></div>
</div><!--header-->
<div class="contents">
<a href="dl__memory__pool_8h.html">浏览该文件的文档.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span></div>
<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span><span class="preprocessor">#pragma once</span></div>
<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span> </div>
<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="preprocessor">#include &lt;list&gt;</span></div>
<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="preprocessor">#include &lt;cassert&gt;</span></div>
<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span><span class="preprocessor">#include &lt;functional&gt;</span></div>
<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="preprocessor">#include &lt;cstdlib&gt;</span></div>
<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span> </div>
<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span><span class="preprocessor">#include &quot;<a class="code" href="dl__log_8h.html">io/dl_log.h</a>&quot;</span></div>
<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span><span class="preprocessor">#include &quot;<a class="code" href="dl__math_8h.html">math/dl_math.h</a>&quot;</span></div>
<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span> </div>
<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span><span class="preprocessor">#ifdef NDEBUG</span></div>
<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span><span class="keyword">constexpr</span> <span class="keywordtype">bool</span> <a class="code hl_variable" href="dl__memory__pool_8h.html#ad6bd092b3e266aa0935d7e5b16c6230e">OUTPUT_DEBUG</a> = <span class="keyword">false</span>;</div>
<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span><span class="keyword">constexpr</span> <span class="keywordtype">bool</span> <a class="code hl_variable" href="dl__memory__pool_8h.html#a020806b9ca69ce6d6d50205576feb741">OUTPUT_ADD</a> = <span class="keyword">false</span>;</div>
<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span><span class="keyword">constexpr</span> <span class="keywordtype">bool</span> <a class="code hl_variable" href="dl__memory__pool_8h.html#aa5bc91b0e910898584fd4497c943359f">OUTPUT_MOVE</a> = <span class="keyword">false</span>;</div>
<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span><span class="keyword">constexpr</span> <span class="keywordtype">bool</span> <a class="code hl_variable" href="dl__memory__pool_8h.html#a1e264ff1dd19be77f7a3852965bad1c8">OUTPUT_STACK</a> = <span class="keyword">false</span>;</div>
<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span><span class="preprocessor">#else</span></div>
<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"><a class="line" href="dl__memory__pool_8h.html#ad6bd092b3e266aa0935d7e5b16c6230e"> 31</a></span><span class="keyword">constexpr</span> <span class="keywordtype">bool</span> <a class="code hl_variable" href="dl__memory__pool_8h.html#ad6bd092b3e266aa0935d7e5b16c6230e">OUTPUT_DEBUG</a> = <span class="keyword">true</span>;</div>
<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"><a class="line" href="dl__memory__pool_8h.html#a020806b9ca69ce6d6d50205576feb741"> 32</a></span><span class="keyword">constexpr</span> <span class="keywordtype">bool</span> <a class="code hl_variable" href="dl__memory__pool_8h.html#a020806b9ca69ce6d6d50205576feb741">OUTPUT_ADD</a> = <span class="keyword">true</span>;</div>
<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"><a class="line" href="dl__memory__pool_8h.html#aa5bc91b0e910898584fd4497c943359f"> 33</a></span><span class="keyword">constexpr</span> <span class="keywordtype">bool</span> <a class="code hl_variable" href="dl__memory__pool_8h.html#aa5bc91b0e910898584fd4497c943359f">OUTPUT_MOVE</a> = <span class="keyword">false</span>;</div>
<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"><a class="line" href="dl__memory__pool_8h.html#a1e264ff1dd19be77f7a3852965bad1c8"> 34</a></span><span class="keyword">constexpr</span> <span class="keywordtype">bool</span> <a class="code hl_variable" href="dl__memory__pool_8h.html#a1e264ff1dd19be77f7a3852965bad1c8">OUTPUT_STACK</a> = <span class="keyword">false</span>;</div>
<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span> </div>
<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacedl.html">dl</a></div>
<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span>{</div>
<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span> </div>
<div class="foldopen" id="foldopen00040" data-start="{" data-end="};">
<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"><a class="line" href="structdl_1_1_gc_ref_info.html"> 40</a></span><span class="keyword">struct </span><a class="code hl_struct" href="structdl_1_1_gc_ref_info.html">GcRefInfo</a></div>
<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span>{</div>
<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"><a class="line" href="structdl_1_1_gc_ref_info.html#a4f52291292c3196773e288600553412b"> 42</a></span> uint32_t <a class="code hl_variable" href="structdl_1_1_gc_ref_info.html#a4f52291292c3196773e288600553412b">_count</a>;</div>
<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span>};</div>
</div>
<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span> </div>
<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span></div>
<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div>
<div class="foldopen" id="foldopen00048" data-start="{" data-end="};">
<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"><a class="line" href="classdl_1_1_g_c.html"> 48</a></span><span class="keyword">class </span><a class="code hl_function" href="classdl_1_1_g_c.html#a4f1103488bdead9863584d92726ec863">GC</a></div>
<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span>{</div>
<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> <span class="keyword">template</span>&lt;<span class="keyword">typename</span> TT&gt;</div>
<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"><a class="line" href="classdl_1_1_g_c.html#a18465f5bff2bd7f9e8444629abb8f971"> 51</a></span> <span class="keyword">friend</span> <span class="keyword">class </span><a class="code hl_friend" href="classdl_1_1_g_c.html#a18465f5bff2bd7f9e8444629abb8f971">PoolList</a>;</div>
<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span><span class="keyword">public</span>:</div>
<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"><a class="line" href="classdl_1_1_g_c.html#a4f1103488bdead9863584d92726ec863"> 53</a></span> <a class="code hl_function" href="classdl_1_1_g_c.html#a4f1103488bdead9863584d92726ec863">GC</a>() :_p(nullptr), _ref(nullptr) {}</div>
<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"><a class="line" href="classdl_1_1_g_c.html#aa3c5afce2ec2a25bd420773b710bfe62"> 54</a></span> <a class="code hl_function" href="classdl_1_1_g_c.html#aa3c5afce2ec2a25bd420773b710bfe62">GC</a>(<span class="keyword">const</span> <a class="code hl_function" href="classdl_1_1_g_c.html#a4f1103488bdead9863584d92726ec863">GC&lt;T&gt;</a>&amp; b) : _p(b._p), _ref(b._ref) { <span class="keywordflow">if</span> (_ref)++_ref-&gt;_count; }</div>
<div class="foldopen" id="foldopen00055" data-start="{" data-end="}">
<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"><a class="line" href="classdl_1_1_g_c.html#a44c6673dc8f5bc1e4de45bbf6dbb0c33"> 55</a></span> <span class="keyword">operator</span> bool()<span class="keyword"> const</span></div>
<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span><span class="keyword"> </span>{</div>
<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> <span class="keywordflow">return</span> _p != <span class="keyword">nullptr</span>;</div>
<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> }</div>
</div>
<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> </div>
<div class="foldopen" id="foldopen00060" data-start="{" data-end="}">
<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"><a class="line" href="classdl_1_1_g_c.html#a55e1fba4dd91664bca27c93c692378b8"> 60</a></span> <a class="code hl_enumvalue" href="namespacedl.html#a38a0162879cdbfbbe99ba16e7a170132ab9ece18c950afbfa6b0fdbfa4ff731d3">T</a>* <a class="code hl_function" href="classdl_1_1_g_c.html#a55e1fba4dd91664bca27c93c692378b8">operator-&gt;</a>()</div>
<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> {</div>
<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> <span class="keywordflow">return</span> _p;</div>
<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> }</div>
</div>
<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> </div>
<div class="foldopen" id="foldopen00065" data-start="{" data-end="}">
<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"><a class="line" href="classdl_1_1_g_c.html#a216b94a76930265ce4a92ef6850625d5"> 65</a></span> <a class="code hl_enumvalue" href="namespacedl.html#a38a0162879cdbfbbe99ba16e7a170132ab9ece18c950afbfa6b0fdbfa4ff731d3">T</a>&amp; <a class="code hl_function" href="classdl_1_1_g_c.html#a216b94a76930265ce4a92ef6850625d5">operator*</a>()</div>
<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> {</div>
<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> <span class="keywordflow">return</span> *_p;</div>
<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> }</div>
</div>
<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> </div>
<div class="foldopen" id="foldopen00070" data-start="{" data-end="}">
<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"><a class="line" href="classdl_1_1_g_c.html#a52f8ab5b3acb25489498db3e03441e33"> 70</a></span> <a class="code hl_function" href="classdl_1_1_g_c.html#a4f1103488bdead9863584d92726ec863">GC&lt;T&gt;</a>&amp; <a class="code hl_function" href="classdl_1_1_g_c.html#a52f8ab5b3acb25489498db3e03441e33">operator=</a>(<span class="keyword">const</span> <a class="code hl_function" href="classdl_1_1_g_c.html#a4f1103488bdead9863584d92726ec863">GC&lt;T&gt;</a>&amp; b)</div>
<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> {</div>
<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> <span class="comment">//如果相同,则什么都不做</span></div>
<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> <span class="keywordflow">if</span> (_p == b._p)</div>
<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> {</div>
<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span> <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> }</div>
<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> </div>
<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> <span class="comment">//不同,且有原对象,减少1次对原对象的引用</span></div>
<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> <span class="keywordflow">if</span> (_p)</div>
<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> {</div>
<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span> assert(_ref &amp;&amp; _ref-&gt;_count &gt; 0);</div>
<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span> --_ref-&gt;_count;</div>
<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span> _check_dtor();</div>
<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span> }</div>
<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span> </div>
<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> <span class="comment">//复制,再增加b的一次引用(b可能为空)</span></div>
<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span> _p = b._p;</div>
<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> _ref = b._ref;</div>
<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span> <span class="keywordflow">if</span> (_ref)</div>
<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> ++_ref-&gt;<a class="code hl_variable" href="structdl_1_1_gc_ref_info.html#a4f52291292c3196773e288600553412b">_count</a>;</div>
<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> </div>
<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span> }</div>
</div>
<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span></div>
<div class="foldopen" id="foldopen00096" data-start="{" data-end="}">
<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"><a class="line" href="classdl_1_1_g_c.html#ab4d231782bc9e3e86839e172a7d90f29"> 96</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classdl_1_1_g_c.html#ab4d231782bc9e3e86839e172a7d90f29">CancelRef</a>()</div>
<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> {</div>
<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> <span class="keywordflow">if</span> (_p)</div>
<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span> {</div>
<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span> assert(_ref &amp;&amp; _ref-&gt;_count &gt; 0);</div>
<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span> --_ref-&gt;_count;</div>
<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span> _check_dtor();</div>
<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span> }</div>
<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span> }</div>
</div>
<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span> </div>
<div class="foldopen" id="foldopen00106" data-start="{" data-end="}">
<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"><a class="line" href="classdl_1_1_g_c.html#a40fc330314b4d70ce8c1b14f8cbf39f5"> 106</a></span> <span class="keywordtype">size_t</span> <a class="code hl_function" href="classdl_1_1_g_c.html#a40fc330314b4d70ce8c1b14f8cbf39f5">GetRefCount</a>()</div>
<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span> {</div>
<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> <span class="keywordflow">if</span> (_p)</div>
<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span> {</div>
<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span> assert(_ref &amp;&amp; _ref-&gt;_count &gt; 0);</div>
<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span> <span class="keywordflow">return</span> _ref-&gt;_count;</div>
<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span> }</div>
<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span> <span class="keywordflow">return</span> 0;</div>
<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span> }</div>
</div>
<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span></div>
<div class="foldopen" id="foldopen00117" data-start="{" data-end="}">
<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"><a class="line" href="classdl_1_1_g_c.html#a27ee1db357a755ce985b13c2911fff1b"> 117</a></span> <a class="code hl_enumvalue" href="namespacedl.html#a38a0162879cdbfbbe99ba16e7a170132ab9ece18c950afbfa6b0fdbfa4ff731d3">T</a>* <a class="code hl_function" href="classdl_1_1_g_c.html#a27ee1db357a755ce985b13c2911fff1b">GetPointer</a>()</div>
<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span> {</div>
<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span> <span class="keywordflow">return</span> _p;</div>
<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span> }</div>
</div>
<div class="foldopen" id="foldopen00121" data-start="{" data-end="}">
<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"><a class="line" href="classdl_1_1_g_c.html#a2a900e7dc77ba55c1b83e6b13cd07e12"> 121</a></span> <span class="keyword">const</span> <a class="code hl_enumvalue" href="namespacedl.html#a38a0162879cdbfbbe99ba16e7a170132ab9ece18c950afbfa6b0fdbfa4ff731d3">T</a>* <a class="code hl_function" href="classdl_1_1_g_c.html#a2a900e7dc77ba55c1b83e6b13cd07e12">GetPointer</a>()<span class="keyword"> const</span></div>
<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span><span class="keyword"> </span>{</div>
<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span> <span class="keywordflow">return</span> _p;</div>
<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span> }</div>
</div>
<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span> </div>
<div class="foldopen" id="foldopen00126" data-start="{" data-end="}">
<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"><a class="line" href="classdl_1_1_g_c.html#a48f6e229d828621cc0de08fa32e6584c"> 126</a></span> <a class="code hl_function" href="classdl_1_1_g_c.html#a48f6e229d828621cc0de08fa32e6584c">~GC</a>()</div>
<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span> {</div>
<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span> <span class="comment">// 如果退出时崩溃到这里,说明有GC&lt;T&gt;后于PoolList析构,需要使其退出主函数之前析构</span></div>
<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span> <span class="comment">// 简单说就是 不要使用gc全局变量,因为可能晚于GC系统析构</span></div>
<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span> </div>
<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span> <span class="comment">// Text包含Sprite,如果Sprite先全局析构,再全局析构Text也会出问题</span></div>
<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span> <span class="comment">// 此问题已解决,先使用一下gcSpritePoolList&lt;Sprite&gt;就会先于PoolList&lt;Text&gt;析构</span></div>
<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span> <span class="keywordflow">if</span> (_p)</div>
<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span> {</div>
<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span> assert(_ref &amp;&amp; _ref-&gt;_count &gt; 0);</div>
<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span> --_ref-&gt;_count;</div>
<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span> _check_dtor();</div>
<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span> }</div>
<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> }</div>
</div>
<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span> </div>
<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span><span class="keyword">private</span>:</div>
<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span> <a class="code hl_struct" href="structdl_1_1_gc_ref_info.html">GcRefInfo</a>* _ref;</div>
<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span> <a class="code hl_enumvalue" href="namespacedl.html#a38a0162879cdbfbbe99ba16e7a170132ab9ece18c950afbfa6b0fdbfa4ff731d3">T</a>* _p;</div>
<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span> </div>
<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span> <span class="keywordtype">void</span> _check_dtor()</div>
<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span> {</div>
<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span> <span class="keywordflow">if</span> (_ref-&gt;<a class="code hl_variable" href="structdl_1_1_gc_ref_info.html#a4f52291292c3196773e288600553412b">_count</a> == 0)</div>
<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span> {<span class="comment">//显式析构</span></div>
<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span> _p-&gt;~T();</div>
<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span> _p = <span class="keyword">nullptr</span>;</div>
<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span> _ref = <span class="keyword">nullptr</span>;</div>
<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span> }</div>
<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span> }</div>
<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span>};</div>
</div>
<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span></div>
<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div>
<div class="foldopen" id="foldopen00157" data-start="{" data-end="};">
<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"><a class="line" href="classdl_1_1_pool_list.html"> 157</a></span><span class="keyword">class </span>PoolList</div>
<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span>{</div>
<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"><a class="line" href="classdl_1_1_pool_list.html#a270735d3eecf0a2a2abf0c5e6b252dd6"> 159</a></span> <span class="keyword">friend</span> <span class="keyword">class </span><a class="code hl_friend" href="classdl_1_1_pool_list.html#a270735d3eecf0a2a2abf0c5e6b252dd6">MemoryPool</a>;</div>
<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span><span class="keyword">public</span>:</div>
<div class="foldopen" id="foldopen00162" data-start="{" data-end="}">
<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"><a class="line" href="classdl_1_1_pool_list.html#a6ef0ed52bb33aae7654c9f3156a863e3"> 162</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classdl_1_1_pool_list.html#a6ef0ed52bb33aae7654c9f3156a863e3">SetCallbackDelete</a>(std::function&lt;<span class="keywordtype">void</span>()&gt; func)</div>
<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"> 163</span> {</div>
<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span> _cbDelete = func;</div>
<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"> 165</span> }</div>
</div>
<div class="foldopen" id="foldopen00166" data-start="{" data-end="}">
<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"><a class="line" href="classdl_1_1_pool_list.html#a179b156dce3f218122e1f5a15c840a17"> 166</a></span> <span class="keyword">constexpr</span> <span class="keywordtype">unsigned</span> <a class="code hl_function" href="classdl_1_1_pool_list.html#a179b156dce3f218122e1f5a15c840a17">GetNodeSize</a>()</div>
<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"> 167</span> {</div>
<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span> <span class="keywordflow">return</span> <span class="keyword">sizeof</span>(<a class="code hl_enumvalue" href="namespacedl.html#a38a0162879cdbfbbe99ba16e7a170132ab9ece18c950afbfa6b0fdbfa4ff731d3">T</a>) + <span class="keyword">sizeof</span>(<a class="code hl_struct" href="structdl_1_1_gc_ref_info.html">GcRefInfo</a>);</div>
<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span> }</div>
</div>
<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span><span class="keyword">private</span>:</div>
<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"> 171</span> <a class="code hl_class" href="classdl_1_1_pool_list.html">PoolList</a>() {}</div>
<div class="line"><a id="l00172" name="l00172"></a><span class="lineno"> 172</span> <span class="comment">// 取一个位置</span></div>
<div class="line"><a id="l00173" name="l00173"></a><span class="lineno"> 173</span> <span class="keyword">template</span>&lt;<span class="keyword">typename</span>... Args&gt;</div>
<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"> 174</span> GC&lt;T&gt; GetGC(Args&amp;&amp; ...args)</div>
<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span> {</div>
<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span> <span class="keywordtype">void</span>* p = <span class="keyword">nullptr</span>;</div>
<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span> <span class="comment">// 如果没有就新建内存</span></div>
<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span> <span class="keywordflow">if</span> (_listFree.empty())</div>
<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span> _add_free();</div>
<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"> 180</span> </div>
<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"> 181</span> <span class="comment">//</span></div>
<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span> <span class="keywordflow">if</span> (_listFree.empty())</div>
<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span> {</div>
<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span> <a class="code hl_function" href="namespacedl.html#a5bb9ee10db5338251b4bb854939b69b3">log</a>(<span class="stringliteral">&quot;PoolArray::GetGC: 失败!&quot;</span>);</div>
<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span> <span class="keywordflow">return</span> GC&lt;T&gt;();</div>
<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"> 186</span> }</div>
<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"> 187</span> </div>
<div class="line"><a id="l00188" name="l00188"></a><span class="lineno"> 188</span> p = _listFree.back();</div>
<div class="line"><a id="l00189" name="l00189"></a><span class="lineno"> 189</span> _listFree.pop_back();</div>
<div class="line"><a id="l00190" name="l00190"></a><span class="lineno"> 190</span> _listUsed.push_back(p);</div>
<div class="line"><a id="l00191" name="l00191"></a><span class="lineno"> 191</span> </div>
<div class="line"><a id="l00192" name="l00192"></a><span class="lineno"> 192</span> GC&lt;T&gt; ret;</div>
<div class="line"><a id="l00193" name="l00193"></a><span class="lineno"> 193</span> ret._p = <span class="keyword">new</span> (p) <a class="code hl_enumvalue" href="namespacedl.html#a38a0162879cdbfbbe99ba16e7a170132ab9ece18c950afbfa6b0fdbfa4ff731d3">T</a>(args...);</div>
<div class="line"><a id="l00194" name="l00194"></a><span class="lineno"> 194</span> ret._ref = <span class="keyword">new</span> ((<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>*)p + <span class="keyword">sizeof</span>(<a class="code hl_enumvalue" href="namespacedl.html#a38a0162879cdbfbbe99ba16e7a170132ab9ece18c950afbfa6b0fdbfa4ff731d3">T</a>)) GcRefInfo;</div>
<div class="line"><a id="l00195" name="l00195"></a><span class="lineno"> 195</span> ret._ref-&gt;_count = 1;</div>
<div class="line"><a id="l00196" name="l00196"></a><span class="lineno"> 196</span> </div>
<div class="line"><a id="l00197" name="l00197"></a><span class="lineno"> 197</span> <span class="keywordflow">return</span> ret;</div>
<div class="line"><a id="l00198" name="l00198"></a><span class="lineno"> 198</span> }</div>
<div class="line"><a id="l00199" name="l00199"></a><span class="lineno"> 199</span> </div>
<div class="line"><a id="l00200" name="l00200"></a><span class="lineno"> 200</span> </div>
<div class="line"><a id="l00201" name="l00201"></a><span class="lineno"> 201</span> ~PoolList()</div>
<div class="line"><a id="l00202" name="l00202"></a><span class="lineno"> 202</span> {</div>
<div class="line"><a id="l00203" name="l00203"></a><span class="lineno"> 203</span> <span class="comment">// 不能使用全局的GC变量</span></div>
<div class="line"><a id="l00204" name="l00204"></a><span class="lineno"> 204</span> </div>
<div class="line"><a id="l00205" name="l00205"></a><span class="lineno"> 205</span> <span class="comment">// Used列表的内存强行回收</span></div>
<div class="line"><a id="l00206" name="l00206"></a><span class="lineno"> 206</span> <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp; iter : _listUsed)</div>
<div class="line"><a id="l00207" name="l00207"></a><span class="lineno"> 207</span> free(iter);<span class="comment">// _aligned_free(iter);</span></div>
<div class="line"><a id="l00208" name="l00208"></a><span class="lineno"> 208</span> </div>
<div class="line"><a id="l00209" name="l00209"></a><span class="lineno"> 209</span> <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp; iter : _listFree)</div>
<div class="line"><a id="l00210" name="l00210"></a><span class="lineno"> 210</span> free(iter);<span class="comment">// _aligned_free(iter);</span></div>
<div class="line"><a id="l00211" name="l00211"></a><span class="lineno"> 211</span> </div>
<div class="line"><a id="l00212" name="l00212"></a><span class="lineno"> 212</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="dl__memory__pool_8h.html#ad6bd092b3e266aa0935d7e5b16c6230e">OUTPUT_DEBUG</a>)</div>
<div class="line"><a id="l00213" name="l00213"></a><span class="lineno"> 213</span> {</div>
<div class="line"><a id="l00214" name="l00214"></a><span class="lineno"> 214</span> <a class="code hl_function" href="namespacedl.html#a4be24a293bd1feedc6c35d1197d067a8">log_easy</a>(fmt::format(<span class="stringliteral">&quot;释放 {}({}byte)内存,(已使用{}+空闲{})个\n&quot;</span>,</div>
<div class="line"><a id="l00215" name="l00215"></a><span class="lineno"> 215</span> <span class="keyword">typeid</span>(<a class="code hl_enumvalue" href="namespacedl.html#a38a0162879cdbfbbe99ba16e7a170132ab9ece18c950afbfa6b0fdbfa4ff731d3">T</a>).name(), <a class="code hl_function" href="classdl_1_1_pool_list.html#a179b156dce3f218122e1f5a15c840a17">GetNodeSize</a>(), _listUsed.size(), _listFree.size()));</div>
<div class="line"><a id="l00216" name="l00216"></a><span class="lineno"> 216</span> }</div>
<div class="line"><a id="l00217" name="l00217"></a><span class="lineno"> 217</span> </div>
<div class="line"><a id="l00218" name="l00218"></a><span class="lineno"> 218</span> <span class="keywordflow">if</span>(_cbDelete)</div>
<div class="line"><a id="l00219" name="l00219"></a><span class="lineno"> 219</span> _cbDelete();</div>
<div class="line"><a id="l00220" name="l00220"></a><span class="lineno"> 220</span> }</div>
<div class="line"><a id="l00221" name="l00221"></a><span class="lineno"> 221</span><span class="keyword">private</span>:</div>
<div class="line"><a id="l00222" name="l00222"></a><span class="lineno"> 222</span> <span class="comment">// 可使用的节点内存</span></div>
<div class="line"><a id="l00223" name="l00223"></a><span class="lineno"> 223</span> std::vector&lt;void*&gt; _listFree;</div>
<div class="line"><a id="l00224" name="l00224"></a><span class="lineno"> 224</span> std::list&lt;void*&gt; _listUsed;</div>
<div class="line"><a id="l00225" name="l00225"></a><span class="lineno"> 225</span> <span class="comment">// 回调</span></div>
<div class="line"><a id="l00226" name="l00226"></a><span class="lineno"> 226</span> std::function&lt;void()&gt; _cbDelete;</div>
<div class="line"><a id="l00227" name="l00227"></a><span class="lineno"> 227</span> </div>
<div class="line"><a id="l00228" name="l00228"></a><span class="lineno"> 228</span> <span class="comment">// 批量new</span></div>
<div class="line"><a id="l00229" name="l00229"></a><span class="lineno"> 229</span> <span class="keywordtype">void</span> _add_free()</div>
<div class="line"><a id="l00230" name="l00230"></a><span class="lineno"> 230</span> {</div>
<div class="line"><a id="l00231" name="l00231"></a><span class="lineno"> 231</span> <span class="comment">//先检查used转移到free</span></div>
<div class="line"><a id="l00232" name="l00232"></a><span class="lineno"> 232</span> <span class="keywordtype">size_t</span> count = 0;</div>
<div class="line"><a id="l00233" name="l00233"></a><span class="lineno"> 233</span> <span class="keywordflow">if</span> (_listUsed.size() &gt; 10000)<span class="comment">//100m (sizeof(GcRefInfo) + sizeof(T)) &gt; 1024 * 1024 * 100</span></div>
<div class="line"><a id="l00234" name="l00234"></a><span class="lineno"> 234</span> {</div>
<div class="line"><a id="l00235" name="l00235"></a><span class="lineno"> 235</span> <span class="keywordflow">for</span> (<span class="keyword">auto</span> iter = _listUsed.begin(); iter != _listUsed.end();)</div>
<div class="line"><a id="l00236" name="l00236"></a><span class="lineno"> 236</span> {</div>
<div class="line"><a id="l00237" name="l00237"></a><span class="lineno"> 237</span> <span class="keywordtype">void</span>* p = (<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>*)*iter + <span class="keyword">sizeof</span>(<a class="code hl_enumvalue" href="namespacedl.html#a38a0162879cdbfbbe99ba16e7a170132ab9ece18c950afbfa6b0fdbfa4ff731d3">T</a>);</div>
<div class="line"><a id="l00238" name="l00238"></a><span class="lineno"> 238</span> <span class="keywordflow">if</span> (((GcRefInfo*)p)-&gt;_count == 0)</div>
<div class="line"><a id="l00239" name="l00239"></a><span class="lineno"> 239</span> {</div>
<div class="line"><a id="l00240" name="l00240"></a><span class="lineno"> 240</span> _listFree.push_back(*iter);</div>
<div class="line"><a id="l00241" name="l00241"></a><span class="lineno"> 241</span> _listUsed.erase(iter++);</div>
<div class="line"><a id="l00242" name="l00242"></a><span class="lineno"> 242</span> ++count;</div>
<div class="line"><a id="l00243" name="l00243"></a><span class="lineno"> 243</span> }</div>
<div class="line"><a id="l00244" name="l00244"></a><span class="lineno"> 244</span> <span class="keywordflow">else</span></div>
<div class="line"><a id="l00245" name="l00245"></a><span class="lineno"> 245</span> ++iter;</div>
<div class="line"><a id="l00246" name="l00246"></a><span class="lineno"> 246</span> }</div>
<div class="line"><a id="l00247" name="l00247"></a><span class="lineno"> 247</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="dl__memory__pool_8h.html#ad6bd092b3e266aa0935d7e5b16c6230e">OUTPUT_DEBUG</a> &amp;&amp; <a class="code hl_variable" href="dl__memory__pool_8h.html#aa5bc91b0e910898584fd4497c943359f">OUTPUT_MOVE</a>)</div>
<div class="line"><a id="l00248" name="l00248"></a><span class="lineno"> 248</span> {</div>
<div class="line"><a id="l00249" name="l00249"></a><span class="lineno"> 249</span> LogStackTrack l{ <a class="code hl_variable" href="dl__memory__pool_8h.html#a1e264ff1dd19be77f7a3852965bad1c8">OUTPUT_STACK</a> };</div>
<div class="line"><a id="l00250" name="l00250"></a><span class="lineno"> 250</span> <a class="code hl_define" href="dl__log_8h.html#aea1d36b143643ff03392dff21c698db5">log_test</a>(<span class="stringliteral">&quot;转移 {}({}byte)内存,({})个&quot;</span>,</div>
<div class="line"><a id="l00251" name="l00251"></a><span class="lineno"> 251</span> <span class="keyword">typeid</span>(<a class="code hl_enumvalue" href="namespacedl.html#a38a0162879cdbfbbe99ba16e7a170132ab9ece18c950afbfa6b0fdbfa4ff731d3">T</a>).name(), <a class="code hl_function" href="classdl_1_1_pool_list.html#a179b156dce3f218122e1f5a15c840a17">GetNodeSize</a>(), count);</div>
<div class="line"><a id="l00252" name="l00252"></a><span class="lineno"> 252</span> }</div>
<div class="line"><a id="l00253" name="l00253"></a><span class="lineno"> 253</span> }</div>
<div class="line"><a id="l00254" name="l00254"></a><span class="lineno"> 254</span> </div>
<div class="line"><a id="l00255" name="l00255"></a><span class="lineno"> 255</span> </div>
<div class="line"><a id="l00256" name="l00256"></a><span class="lineno"> 256</span> <span class="comment">//转移过少</span></div>
<div class="line"><a id="l00257" name="l00257"></a><span class="lineno"> 257</span> <span class="keywordflow">if</span> (count &lt;= _listUsed.size() / 2)</div>
<div class="line"><a id="l00258" name="l00258"></a><span class="lineno"> 258</span> {</div>
<div class="line"><a id="l00259" name="l00259"></a><span class="lineno"> 259</span> <span class="comment">//</span></div>
<div class="line"><a id="l00260" name="l00260"></a><span class="lineno"> 260</span> <span class="keywordtype">size_t</span> num = _listUsed.size() + 10;</div>
<div class="line"><a id="l00261" name="l00261"></a><span class="lineno"> 261</span> <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i != num; ++i)</div>
<div class="line"><a id="l00262" name="l00262"></a><span class="lineno"> 262</span> {</div>
<div class="line"><a id="l00263" name="l00263"></a><span class="lineno"> 263</span> <span class="keywordtype">unsigned</span> MEM_SIZE = <a class="code hl_function" href="classdl_1_1_pool_list.html#a179b156dce3f218122e1f5a15c840a17">GetNodeSize</a>();<span class="comment">// Math::CeilToPow2(GetNodeSize());</span></div>
<div class="line"><a id="l00264" name="l00264"></a><span class="lineno"> 264</span> <span class="keywordtype">void</span>* p = malloc(MEM_SIZE);<span class="comment">// _aligned_malloc(MEM_SIZE, 16);</span></div>
<div class="line"><a id="l00265" name="l00265"></a><span class="lineno"> 265</span> </div>
<div class="line"><a id="l00266" name="l00266"></a><span class="lineno"> 266</span> <span class="keywordflow">if</span> (p == <span class="keyword">nullptr</span>)</div>
<div class="line"><a id="l00267" name="l00267"></a><span class="lineno"> 267</span> {</div>
<div class="line"><a id="l00268" name="l00268"></a><span class="lineno"> 268</span> <a class="code hl_function" href="namespacedl.html#a5bb9ee10db5338251b4bb854939b69b3">log</a>(<span class="stringliteral">&quot;malloc失败!&quot;</span>);</div>
<div class="line"><a id="l00269" name="l00269"></a><span class="lineno"> 269</span> <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l00270" name="l00270"></a><span class="lineno"> 270</span> }</div>
<div class="line"><a id="l00271" name="l00271"></a><span class="lineno"> 271</span> _listFree.push_back(p);</div>
<div class="line"><a id="l00272" name="l00272"></a><span class="lineno"> 272</span> }</div>
<div class="line"><a id="l00273" name="l00273"></a><span class="lineno"> 273</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="dl__memory__pool_8h.html#ad6bd092b3e266aa0935d7e5b16c6230e">OUTPUT_DEBUG</a> &amp;&amp; <a class="code hl_variable" href="dl__memory__pool_8h.html#a020806b9ca69ce6d6d50205576feb741">OUTPUT_ADD</a>)</div>
<div class="line"><a id="l00274" name="l00274"></a><span class="lineno"> 274</span> {</div>
<div class="line"><a id="l00275" name="l00275"></a><span class="lineno"> 275</span> LogStackTrack l{ <a class="code hl_variable" href="dl__memory__pool_8h.html#a1e264ff1dd19be77f7a3852965bad1c8">OUTPUT_STACK</a> };</div>
<div class="line"><a id="l00276" name="l00276"></a><span class="lineno"> 276</span> <a class="code hl_define" href="dl__log_8h.html#aea1d36b143643ff03392dff21c698db5">log_test</a>(<span class="stringliteral">&quot;分配 {}({}byte)内存,({})个&quot;</span>,</div>
<div class="line"><a id="l00277" name="l00277"></a><span class="lineno"> 277</span> <span class="keyword">typeid</span>(<a class="code hl_enumvalue" href="namespacedl.html#a38a0162879cdbfbbe99ba16e7a170132ab9ece18c950afbfa6b0fdbfa4ff731d3">T</a>).name(), <a class="code hl_function" href="classdl_1_1_pool_list.html#a179b156dce3f218122e1f5a15c840a17">GetNodeSize</a>(), _listFree.size());</div>
<div class="line"><a id="l00278" name="l00278"></a><span class="lineno"> 278</span> }</div>
<div class="line"><a id="l00279" name="l00279"></a><span class="lineno"> 279</span> }</div>
<div class="line"><a id="l00280" name="l00280"></a><span class="lineno"> 280</span> </div>
<div class="line"><a id="l00281" name="l00281"></a><span class="lineno"> 281</span> }</div>
<div class="line"><a id="l00282" name="l00282"></a><span class="lineno"> 282</span>};</div>
</div>
<div class="line"><a id="l00283" name="l00283"></a><span class="lineno"> 283</span> </div>
<div class="line"><a id="l00284" name="l00284"></a><span class="lineno"> 284</span> </div>
<div class="line"><a id="l00285" name="l00285"></a><span class="lineno"> 285</span></div>
<div class="foldopen" id="foldopen00287" data-start="{" data-end="};">
<div class="line"><a id="l00287" name="l00287"></a><span class="lineno"><a class="line" href="classdl_1_1_memory_pool.html"> 287</a></span><span class="keyword">class </span>MemoryPool</div>
<div class="line"><a id="l00288" name="l00288"></a><span class="lineno"> 288</span>{</div>
<div class="line"><a id="l00289" name="l00289"></a><span class="lineno"> 289</span><span class="keyword">public</span>:</div>
<div class="line"><a id="l00294" name="l00294"></a><span class="lineno"> 294</span> <span class="keyword">template</span>&lt;<span class="keyword">typename</span> <a class="code hl_enumvalue" href="namespacedl.html#a38a0162879cdbfbbe99ba16e7a170132ab9ece18c950afbfa6b0fdbfa4ff731d3">T</a>, <span class="keyword">typename</span>... Args&gt;</div>
<div class="foldopen" id="foldopen00295" data-start="{" data-end="}">
<div class="line"><a id="l00295" name="l00295"></a><span class="lineno"><a class="line" href="classdl_1_1_memory_pool.html#a37786ddf6143b57582609cec09a17cb5"> 295</a></span> <span class="keyword">static</span> <a class="code hl_class" href="classdl_1_1_g_c.html">GC&lt;T&gt;</a> <a class="code hl_function" href="classdl_1_1_memory_pool.html#a37786ddf6143b57582609cec09a17cb5">GetGC</a>(Args&amp;&amp; ...args)</div>
<div class="line"><a id="l00296" name="l00296"></a><span class="lineno"> 296</span> {</div>
<div class="line"><a id="l00297" name="l00297"></a><span class="lineno"> 297</span> <span class="keywordflow">return</span> <a class="code hl_function" href="classdl_1_1_memory_pool.html#aefdd4b7de00295b84508294f462dc751">GetPoolList&lt;T&gt;</a>().GetGC(args...);</div>
<div class="line"><a id="l00298" name="l00298"></a><span class="lineno"> 298</span> }</div>
</div>
<div class="line"><a id="l00299" name="l00299"></a><span class="lineno"> 299</span> </div>
<div class="line"><a id="l00300" name="l00300"></a><span class="lineno"> 300</span> <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div>
<div class="foldopen" id="foldopen00301" data-start="{" data-end="}">
<div class="line"><a id="l00301" name="l00301"></a><span class="lineno"><a class="line" href="classdl_1_1_memory_pool.html#aefdd4b7de00295b84508294f462dc751"> 301</a></span> <span class="keyword">static</span> <a class="code hl_class" href="classdl_1_1_pool_list.html">PoolList&lt;T&gt;</a>&amp; <a class="code hl_function" href="classdl_1_1_memory_pool.html#aefdd4b7de00295b84508294f462dc751">GetPoolList</a>()</div>
<div class="line"><a id="l00302" name="l00302"></a><span class="lineno"> 302</span> {</div>
<div class="line"><a id="l00303" name="l00303"></a><span class="lineno"> 303</span> <span class="keyword">static</span> <a class="code hl_class" href="classdl_1_1_pool_list.html">PoolList&lt;T&gt;</a> pool_list;</div>
<div class="line"><a id="l00304" name="l00304"></a><span class="lineno"> 304</span> <span class="keywordflow">return</span> pool_list;</div>
<div class="line"><a id="l00305" name="l00305"></a><span class="lineno"> 305</span> }</div>
</div>
<div class="line"><a id="l00306" name="l00306"></a><span class="lineno"> 306</span><span class="keyword">private</span>:</div>
<div class="line"><a id="l00307" name="l00307"></a><span class="lineno"> 307</span> <a class="code hl_class" href="classdl_1_1_memory_pool.html">MemoryPool</a>() = <span class="keyword">delete</span>;</div>
<div class="line"><a id="l00308" name="l00308"></a><span class="lineno"> 308</span>};</div>
</div>
<div class="line"><a id="l00309" name="l00309"></a><span class="lineno"> 309</span></div>
<div class="line"><a id="l00315" name="l00315"></a><span class="lineno"> 315</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> <a class="code hl_enumvalue" href="namespacedl.html#a38a0162879cdbfbbe99ba16e7a170132ab9ece18c950afbfa6b0fdbfa4ff731d3">T</a>, <span class="keyword">typename</span>... Args&gt;</div>
<div class="foldopen" id="foldopen00316" data-start="{" data-end="}">
<div class="line"><a id="l00316" name="l00316"></a><span class="lineno"><a class="line" href="namespacedl.html#a106e7fc6f72449d977852f2771eddcda"> 316</a></span><span class="keyword">auto</span> <a class="code hl_function" href="namespacedl.html#a106e7fc6f72449d977852f2771eddcda">get_gc</a>(Args&amp;&amp; ...args)</div>
<div class="line"><a id="l00317" name="l00317"></a><span class="lineno"> 317</span>{</div>
<div class="line"><a id="l00318" name="l00318"></a><span class="lineno"> 318</span> <span class="keywordflow">return</span> <a class="code hl_function" href="classdl_1_1_memory_pool.html#a37786ddf6143b57582609cec09a17cb5">MemoryPool::GetGC&lt;T&gt;</a>(args...);</div>
<div class="line"><a id="l00319" name="l00319"></a><span class="lineno"> 319</span>}</div>
</div>
<div class="line"><a id="l00320" name="l00320"></a><span class="lineno"> 320</span> </div>
<div class="line"><a id="l00321" name="l00321"></a><span class="lineno"> 321</span> </div>
<div class="line"><a id="l00322" name="l00322"></a><span class="lineno"> 322</span>}</div>
<div class="ttc" id="aclassdl_1_1_g_c_html"><div class="ttname"><a href="classdl_1_1_g_c.html">dl::GC</a></div><div class="ttdoc">引用计数对象,通过get_gc函数创建</div><div class="ttdef"><b>定义</b> <a href="#l00048">dl_memory_pool.h:49</a></div></div>
<div class="ttc" id="aclassdl_1_1_g_c_html_a18465f5bff2bd7f9e8444629abb8f971"><div class="ttname"><a href="classdl_1_1_g_c.html#a18465f5bff2bd7f9e8444629abb8f971">dl::GC&lt; Actor &gt;::PoolList</a></div><div class="ttdeci">friend class PoolList</div><div class="ttdef"><b>定义</b> <a href="#l00051">dl_memory_pool.h:51</a></div></div>
<div class="ttc" id="aclassdl_1_1_g_c_html_a216b94a76930265ce4a92ef6850625d5"><div class="ttname"><a href="classdl_1_1_g_c.html#a216b94a76930265ce4a92ef6850625d5">dl::GC::operator*</a></div><div class="ttdeci">T &amp; operator*()</div><div class="ttdef"><b>定义</b> <a href="#l00065">dl_memory_pool.h:65</a></div></div>
<div class="ttc" id="aclassdl_1_1_g_c_html_a27ee1db357a755ce985b13c2911fff1b"><div class="ttname"><a href="classdl_1_1_g_c.html#a27ee1db357a755ce985b13c2911fff1b">dl::GC::GetPointer</a></div><div class="ttdeci">T * GetPointer()</div><div class="ttdoc">直接获取指针,注意生命周期</div><div class="ttdef"><b>定义</b> <a href="#l00117">dl_memory_pool.h:117</a></div></div>
<div class="ttc" id="aclassdl_1_1_g_c_html_a2a900e7dc77ba55c1b83e6b13cd07e12"><div class="ttname"><a href="classdl_1_1_g_c.html#a2a900e7dc77ba55c1b83e6b13cd07e12">dl::GC::GetPointer</a></div><div class="ttdeci">const T * GetPointer() const</div><div class="ttdef"><b>定义</b> <a href="#l00121">dl_memory_pool.h:121</a></div></div>
<div class="ttc" id="aclassdl_1_1_g_c_html_a40fc330314b4d70ce8c1b14f8cbf39f5"><div class="ttname"><a href="classdl_1_1_g_c.html#a40fc330314b4d70ce8c1b14f8cbf39f5">dl::GC::GetRefCount</a></div><div class="ttdeci">size_t GetRefCount()</div><div class="ttdef"><b>定义</b> <a href="#l00106">dl_memory_pool.h:106</a></div></div>
<div class="ttc" id="aclassdl_1_1_g_c_html_a48f6e229d828621cc0de08fa32e6584c"><div class="ttname"><a href="classdl_1_1_g_c.html#a48f6e229d828621cc0de08fa32e6584c">dl::GC::~GC</a></div><div class="ttdeci">~GC()</div><div class="ttdef"><b>定义</b> <a href="#l00126">dl_memory_pool.h:126</a></div></div>
<div class="ttc" id="aclassdl_1_1_g_c_html_a4f1103488bdead9863584d92726ec863"><div class="ttname"><a href="classdl_1_1_g_c.html#a4f1103488bdead9863584d92726ec863">dl::GC::GC</a></div><div class="ttdeci">GC()</div><div class="ttdef"><b>定义</b> <a href="#l00053">dl_memory_pool.h:53</a></div></div>
<div class="ttc" id="aclassdl_1_1_g_c_html_a52f8ab5b3acb25489498db3e03441e33"><div class="ttname"><a href="classdl_1_1_g_c.html#a52f8ab5b3acb25489498db3e03441e33">dl::GC::operator=</a></div><div class="ttdeci">GC&lt; T &gt; &amp; operator=(const GC&lt; T &gt; &amp;b)</div><div class="ttdef"><b>定义</b> <a href="#l00070">dl_memory_pool.h:70</a></div></div>
<div class="ttc" id="aclassdl_1_1_g_c_html_a55e1fba4dd91664bca27c93c692378b8"><div class="ttname"><a href="classdl_1_1_g_c.html#a55e1fba4dd91664bca27c93c692378b8">dl::GC::operator-&gt;</a></div><div class="ttdeci">T * operator-&gt;()</div><div class="ttdef"><b>定义</b> <a href="#l00060">dl_memory_pool.h:60</a></div></div>
<div class="ttc" id="aclassdl_1_1_g_c_html_aa3c5afce2ec2a25bd420773b710bfe62"><div class="ttname"><a href="classdl_1_1_g_c.html#aa3c5afce2ec2a25bd420773b710bfe62">dl::GC::GC</a></div><div class="ttdeci">GC(const GC&lt; T &gt; &amp;b)</div><div class="ttdef"><b>定义</b> <a href="#l00054">dl_memory_pool.h:54</a></div></div>
<div class="ttc" id="aclassdl_1_1_g_c_html_ab4d231782bc9e3e86839e172a7d90f29"><div class="ttname"><a href="classdl_1_1_g_c.html#ab4d231782bc9e3e86839e172a7d90f29">dl::GC::CancelRef</a></div><div class="ttdeci">void CancelRef()</div><div class="ttdoc">取消引用对象</div><div class="ttdef"><b>定义</b> <a href="#l00096">dl_memory_pool.h:96</a></div></div>
<div class="ttc" id="aclassdl_1_1_memory_pool_html"><div class="ttname"><a href="classdl_1_1_memory_pool.html">dl::MemoryPool</a></div><div class="ttdoc">内存池</div><div class="ttdef"><b>定义</b> <a href="#l00287">dl_memory_pool.h:288</a></div></div>
<div class="ttc" id="aclassdl_1_1_memory_pool_html_a37786ddf6143b57582609cec09a17cb5"><div class="ttname"><a href="classdl_1_1_memory_pool.html#a37786ddf6143b57582609cec09a17cb5">dl::MemoryPool::GetGC</a></div><div class="ttdeci">static GC&lt; T &gt; GetGC(Args &amp;&amp;...args)</div><div class="ttdoc">定义一个GC变量(引用计数内存池)</div><div class="ttdef"><b>定义</b> <a href="#l00295">dl_memory_pool.h:295</a></div></div>
<div class="ttc" id="aclassdl_1_1_memory_pool_html_aefdd4b7de00295b84508294f462dc751"><div class="ttname"><a href="classdl_1_1_memory_pool.html#aefdd4b7de00295b84508294f462dc751">dl::MemoryPool::GetPoolList</a></div><div class="ttdeci">static PoolList&lt; T &gt; &amp; GetPoolList()</div><div class="ttdef"><b>定义</b> <a href="#l00301">dl_memory_pool.h:301</a></div></div>
<div class="ttc" id="aclassdl_1_1_pool_list_html"><div class="ttname"><a href="classdl_1_1_pool_list.html">dl::PoolList</a></div><div class="ttdoc">内存池数据</div><div class="ttdef"><b>定义</b> <a href="#l00157">dl_memory_pool.h:158</a></div></div>
<div class="ttc" id="aclassdl_1_1_pool_list_html_a179b156dce3f218122e1f5a15c840a17"><div class="ttname"><a href="classdl_1_1_pool_list.html#a179b156dce3f218122e1f5a15c840a17">dl::PoolList::GetNodeSize</a></div><div class="ttdeci">constexpr unsigned GetNodeSize()</div><div class="ttdef"><b>定义</b> <a href="#l00166">dl_memory_pool.h:166</a></div></div>
<div class="ttc" id="aclassdl_1_1_pool_list_html_a270735d3eecf0a2a2abf0c5e6b252dd6"><div class="ttname"><a href="classdl_1_1_pool_list.html#a270735d3eecf0a2a2abf0c5e6b252dd6">dl::PoolList::MemoryPool</a></div><div class="ttdeci">friend class MemoryPool</div><div class="ttdef"><b>定义</b> <a href="#l00159">dl_memory_pool.h:159</a></div></div>
<div class="ttc" id="aclassdl_1_1_pool_list_html_a6ef0ed52bb33aae7654c9f3156a863e3"><div class="ttname"><a href="classdl_1_1_pool_list.html#a6ef0ed52bb33aae7654c9f3156a863e3">dl::PoolList::SetCallbackDelete</a></div><div class="ttdeci">void SetCallbackDelete(std::function&lt; void()&gt; func)</div><div class="ttdoc">设置删除回调</div><div class="ttdef"><b>定义</b> <a href="#l00162">dl_memory_pool.h:162</a></div></div>
<div class="ttc" id="adl__log_8h_html"><div class="ttname"><a href="dl__log_8h.html">dl_log.h</a></div><div class="ttdoc">日志系统</div></div>
<div class="ttc" id="adl__log_8h_html_aea1d36b143643ff03392dff21c698db5"><div class="ttname"><a href="dl__log_8h.html#aea1d36b143643ff03392dff21c698db5">log_test</a></div><div class="ttdeci">#define log_test(...)</div><div class="ttdef"><b>定义</b> <a href="dl__log_8h_source.html#l00279">dl_log.h:279</a></div></div>
<div class="ttc" id="adl__math_8h_html"><div class="ttname"><a href="dl__math_8h.html">dl_math.h</a></div><div class="ttdoc">数学相关的通用算法</div></div>
<div class="ttc" id="adl__memory__pool_8h_html_a020806b9ca69ce6d6d50205576feb741"><div class="ttname"><a href="dl__memory__pool_8h.html#a020806b9ca69ce6d6d50205576feb741">OUTPUT_ADD</a></div><div class="ttdeci">constexpr bool OUTPUT_ADD</div><div class="ttdef"><b>定义</b> <a href="#l00032">dl_memory_pool.h:32</a></div></div>
<div class="ttc" id="adl__memory__pool_8h_html_a1e264ff1dd19be77f7a3852965bad1c8"><div class="ttname"><a href="dl__memory__pool_8h.html#a1e264ff1dd19be77f7a3852965bad1c8">OUTPUT_STACK</a></div><div class="ttdeci">constexpr bool OUTPUT_STACK</div><div class="ttdef"><b>定义</b> <a href="#l00034">dl_memory_pool.h:34</a></div></div>
<div class="ttc" id="adl__memory__pool_8h_html_aa5bc91b0e910898584fd4497c943359f"><div class="ttname"><a href="dl__memory__pool_8h.html#aa5bc91b0e910898584fd4497c943359f">OUTPUT_MOVE</a></div><div class="ttdeci">constexpr bool OUTPUT_MOVE</div><div class="ttdef"><b>定义</b> <a href="#l00033">dl_memory_pool.h:33</a></div></div>
<div class="ttc" id="adl__memory__pool_8h_html_ad6bd092b3e266aa0935d7e5b16c6230e"><div class="ttname"><a href="dl__memory__pool_8h.html#ad6bd092b3e266aa0935d7e5b16c6230e">OUTPUT_DEBUG</a></div><div class="ttdeci">constexpr bool OUTPUT_DEBUG</div><div class="ttdef"><b>定义</b> <a href="#l00031">dl_memory_pool.h:31</a></div></div>
<div class="ttc" id="anamespacedl_html"><div class="ttname"><a href="namespacedl.html">dl</a></div><div class="ttdef"><b>定义</b> <a href="dl__array_8h_source.html#l00021">dl_array.h:22</a></div></div>
<div class="ttc" id="anamespacedl_html_a106e7fc6f72449d977852f2771eddcda"><div class="ttname"><a href="namespacedl.html#a106e7fc6f72449d977852f2771eddcda">dl::get_gc</a></div><div class="ttdeci">auto get_gc(Args &amp;&amp;...args)</div><div class="ttdoc">定义一个GC变量(引用计数内存池)</div><div class="ttdef"><b>定义</b> <a href="#l00316">dl_memory_pool.h:316</a></div></div>
<div class="ttc" id="anamespacedl_html_a38a0162879cdbfbbe99ba16e7a170132ab9ece18c950afbfa6b0fdbfa4ff731d3"><div class="ttname"><a href="namespacedl.html#a38a0162879cdbfbbe99ba16e7a170132ab9ece18c950afbfa6b0fdbfa4ff731d3">dl::KeyCode::T</a></div><div class="ttdeci">@ T</div><div class="ttdef"><b>定义</b> <a href="dl__input_8h_source.html#l00121">dl_input.h:121</a></div></div>
<div class="ttc" id="anamespacedl_html_a4be24a293bd1feedc6c35d1197d067a8"><div class="ttname"><a href="namespacedl.html#a4be24a293bd1feedc6c35d1197d067a8">dl::log_easy</a></div><div class="ttdeci">void log_easy(std::string_view str)</div><div class="ttdoc">输出日志</div><div class="ttdef"><b>定义</b> <a href="dl__log_8h_source.html#l00255">dl_log.h:255</a></div></div>
<div class="ttc" id="anamespacedl_html_a5bb9ee10db5338251b4bb854939b69b3"><div class="ttname"><a href="namespacedl.html#a5bb9ee10db5338251b4bb854939b69b3">dl::log</a></div><div class="ttdeci">void log(std::string_view str, DL_SOURCE_LOCATION)</div><div class="ttdoc">以当前设置输出</div></div>
<div class="ttc" id="astructdl_1_1_gc_ref_info_html"><div class="ttname"><a href="structdl_1_1_gc_ref_info.html">dl::GcRefInfo</a></div><div class="ttdef"><b>定义</b> <a href="#l00040">dl_memory_pool.h:41</a></div></div>
<div class="ttc" id="astructdl_1_1_gc_ref_info_html_a4f52291292c3196773e288600553412b"><div class="ttname"><a href="structdl_1_1_gc_ref_info.html#a4f52291292c3196773e288600553412b">dl::GcRefInfo::_count</a></div><div class="ttdeci">uint32_t _count</div><div class="ttdef"><b>定义</b> <a href="#l00042">dl_memory_pool.h:42</a></div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
制作者&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.13.1
</small></address>
</div><!-- doc-content -->
</body>
</html>