<!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="en-US">
<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.11.0"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>mi-malloc: Statistics</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="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="cookie.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
$(function() { init_search(); });
/* @license-end */
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
<link href="mimalloc-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="projectlogo"><img alt="Logo" src="mimalloc-logo.svg"/></td>
<td id="projectalign">
<div id="projectname">mi-malloc<span id="projectnumber"> 1.8/2.1</span>
</div>
</td>
<td> <div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<span id="MSearchSelect" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()"> </span>
<input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.svg" alt=""/></a>
</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.11.0 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search/",'.html');
/* @license-end */
</script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
$(function() { codefold.init(0); });
/* @license-end */
</script>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
$(function(){initNavTree('group__stats.html',''); initResizable(true); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div class="header">
<div class="summary">
<a href="#nested-classes">Data Structures</a> |
<a href="#define-members">Macros</a> |
<a href="#func-members">Functions</a> </div>
<div class="headertitle"><div class="title">Statistics</div></div>
</div><!--header-->
<div class="contents">
<p>Print out allocation statistics.
<a href="#details">More...</a></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="nested-classes" name="nested-classes"></a>
Data Structures</h2></td></tr>
<tr class="memitem:structmi__stats__s" id="r_structmi__stats__s"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="#structmi__stats__s">mi_stats_t</a></td></tr>
<tr class="memdesc:structmi__stats__s"><td class="mdescLeft"> </td><td class="mdescRight">Statistics. See <a href="https://github.com/microsoft/mimalloc/blob/main/include/mimalloc-stats.h">include/mimalloc-stats.h</a> for the full definition. <a href="#structmi__stats__s">More...</a><br /></td></tr>
<tr class="separator:structmi__stats__s"><td class="memSeparator" colspan="2"> </td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="define-members" name="define-members"></a>
Macros</h2></td></tr>
<tr class="memitem:gac4411cf3eed23719e511b9e1128888e0" id="r_gac4411cf3eed23719e511b9e1128888e0"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="#gac4411cf3eed23719e511b9e1128888e0">MI_STAT_VERSION</a></td></tr>
<tr class="memdesc:gac4411cf3eed23719e511b9e1128888e0"><td class="mdescLeft"> </td><td class="mdescRight">Statistics version. Increased on each backward incompatible change. <br /></td></tr>
<tr class="separator:gac4411cf3eed23719e511b9e1128888e0"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ga961d0f9f0327ebc9bd8a0b84f6dcb410" id="r_ga961d0f9f0327ebc9bd8a0b84f6dcb410"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="#ga961d0f9f0327ebc9bd8a0b84f6dcb410">mi_stats_t_decl</a>(name)</td></tr>
<tr class="memdesc:ga961d0f9f0327ebc9bd8a0b84f6dcb410"><td class="mdescLeft"> </td><td class="mdescRight">Helper to declare a properly initialized mi_stats_t() local variable as <em>name</em> where the <em>size</em> and <em>version</em> fields are properly initialized. <br /></td></tr>
<tr class="separator:ga961d0f9f0327ebc9bd8a0b84f6dcb410"><td class="memSeparator" colspan="2"> </td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:gaf887e7aa75f13242c4e7ab95d8390536" id="r_gaf887e7aa75f13242c4e7ab95d8390536"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="#gaf887e7aa75f13242c4e7ab95d8390536">mi_process_info_print</a> (void)</td></tr>
<tr class="memdesc:gaf887e7aa75f13242c4e7ab95d8390536"><td class="mdescLeft"> </td><td class="mdescRight">Print out all process info. <br /></td></tr>
<tr class="separator:gaf887e7aa75f13242c4e7ab95d8390536"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ga03ac88d3efee2ae7c34f5340502f4732" id="r_ga03ac88d3efee2ae7c34f5340502f4732"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="#ga03ac88d3efee2ae7c34f5340502f4732">mi_process_info_print_out</a> (<a class="el" href="group__extended.html#gadf31cea7d0332a81c8b882cbbdbadb8d">mi_output_fun</a> *out, void *arg)</td></tr>
<tr class="memdesc:ga03ac88d3efee2ae7c34f5340502f4732"><td class="mdescLeft"> </td><td class="mdescRight">Print out all process info. <br /></td></tr>
<tr class="separator:ga03ac88d3efee2ae7c34f5340502f4732"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ga7d862c2affd5790381da14eb102a364d" id="r_ga7d862c2affd5790381da14eb102a364d"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="#ga7d862c2affd5790381da14eb102a364d">mi_process_info</a> (size_t *elapsed_msecs, size_t *user_msecs, size_t *system_msecs, size_t *current_rss, size_t *peak_rss, size_t *current_commit, size_t *peak_commit, size_t *page_faults)</td></tr>
<tr class="memdesc:ga7d862c2affd5790381da14eb102a364d"><td class="mdescLeft"> </td><td class="mdescRight">Return process information (time and memory usage). <br /></td></tr>
<tr class="separator:ga7d862c2affd5790381da14eb102a364d"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ga2d126e5c62d3badc35445e5d84166df2" id="r_ga2d126e5c62d3badc35445e5d84166df2"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="#ga2d126e5c62d3badc35445e5d84166df2">mi_stats_print</a> (void *out)</td></tr>
<tr class="memdesc:ga2d126e5c62d3badc35445e5d84166df2"><td class="mdescLeft"> </td><td class="mdescRight">Deprecated. <br /></td></tr>
<tr class="separator:ga2d126e5c62d3badc35445e5d84166df2"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ga537f13b299ddf801e49a5a94fde02c79" id="r_ga537f13b299ddf801e49a5a94fde02c79"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="#ga537f13b299ddf801e49a5a94fde02c79">mi_stats_print_out</a> (<a class="el" href="group__extended.html#gadf31cea7d0332a81c8b882cbbdbadb8d">mi_output_fun</a> *out, void *arg)</td></tr>
<tr class="memdesc:ga537f13b299ddf801e49a5a94fde02c79"><td class="mdescLeft"> </td><td class="mdescRight">Print statistics of the current subprocess aggregated over all its heaps. <br /></td></tr>
<tr class="separator:ga537f13b299ddf801e49a5a94fde02c79"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:gaa26d5060ad21b1331a150bb92f6f7086" id="r_gaa26d5060ad21b1331a150bb92f6f7086"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="#gaa26d5060ad21b1331a150bb92f6f7086">mi_stats_get</a> (mi_stats_t *stats)</td></tr>
<tr class="memdesc:gaa26d5060ad21b1331a150bb92f6f7086"><td class="mdescLeft"> </td><td class="mdescRight">Get the statistics for the current subprocess aggregated over all its heaps. <br /></td></tr>
<tr class="separator:gaa26d5060ad21b1331a150bb92f6f7086"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:gadaa3be15899cc82e314fa7d3f8e2afbd" id="r_gadaa3be15899cc82e314fa7d3f8e2afbd"><td class="memItemLeft" align="right" valign="top">char * </td><td class="memItemRight" valign="bottom"><a class="el" href="#gadaa3be15899cc82e314fa7d3f8e2afbd">mi_stats_get_json</a> (size_t buf_size, char *buf)</td></tr>
<tr class="memdesc:gadaa3be15899cc82e314fa7d3f8e2afbd"><td class="mdescLeft"> </td><td class="mdescRight">Get the statistics for the current subprocess aggregated over all its heaps as JSON. <br /></td></tr>
<tr class="separator:gadaa3be15899cc82e314fa7d3f8e2afbd"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:gadecd549d1a7216af596322ac27e78b0d" id="r_gadecd549d1a7216af596322ac27e78b0d"><td class="memItemLeft" align="right" valign="top">size_t </td><td class="memItemRight" valign="bottom"><a class="el" href="#gadecd549d1a7216af596322ac27e78b0d">mi_stats_get_bin_size</a> (size_t bin)</td></tr>
<tr class="memdesc:gadecd549d1a7216af596322ac27e78b0d"><td class="mdescLeft"> </td><td class="mdescRight"><b>v3</b>: Return the block size for the given bin. <br /></td></tr>
<tr class="separator:gadecd549d1a7216af596322ac27e78b0d"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ga2654195cef93ed3613e98b59a19a296f" id="r_ga2654195cef93ed3613e98b59a19a296f"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="#ga2654195cef93ed3613e98b59a19a296f">mi_heap_stats_get</a> (<a class="el" href="group__heap.html#ga34a47cde5a5b38c29f1aa3c5e76943c2">mi_heap_t</a> *heap, mi_stats_t *stats)</td></tr>
<tr class="memdesc:ga2654195cef93ed3613e98b59a19a296f"><td class="mdescLeft"> </td><td class="mdescRight"><b>v3</b>: Return statistics for a given heap. <br /></td></tr>
<tr class="separator:ga2654195cef93ed3613e98b59a19a296f"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:gacb42dede4c38c38f2014b5450c5fcba8" id="r_gacb42dede4c38c38f2014b5450c5fcba8"><td class="memItemLeft" align="right" valign="top">char * </td><td class="memItemRight" valign="bottom"><a class="el" href="#gacb42dede4c38c38f2014b5450c5fcba8">mi_heap_stats_get_json</a> (<a class="el" href="group__heap.html#ga34a47cde5a5b38c29f1aa3c5e76943c2">mi_heap_t</a> *heap, size_t buf_size, char *buf)</td></tr>
<tr class="memdesc:gacb42dede4c38c38f2014b5450c5fcba8"><td class="mdescLeft"> </td><td class="mdescRight"><b>v3</b>: Get the statistics for a heap as JSON. <br /></td></tr>
<tr class="separator:gacb42dede4c38c38f2014b5450c5fcba8"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:gafea365d7842f5f5bc1f235bbc303d585" id="r_gafea365d7842f5f5bc1f235bbc303d585"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="#gafea365d7842f5f5bc1f235bbc303d585">mi_heap_stats_print_out</a> (<a class="el" href="group__heap.html#ga34a47cde5a5b38c29f1aa3c5e76943c2">mi_heap_t</a> *heap, <a class="el" href="group__extended.html#gadf31cea7d0332a81c8b882cbbdbadb8d">mi_output_fun</a> *out, void *arg)</td></tr>
<tr class="memdesc:gafea365d7842f5f5bc1f235bbc303d585"><td class="mdescLeft"> </td><td class="mdescRight"><b>v3</b>: Show the heap statistics as JSON. <br /></td></tr>
<tr class="separator:gafea365d7842f5f5bc1f235bbc303d585"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ga5a34328f846c661aa560f4769cfc15f1" id="r_ga5a34328f846c661aa560f4769cfc15f1"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="#ga5a34328f846c661aa560f4769cfc15f1">mi_heap_stats_merge_to_subproc</a> (<a class="el" href="group__heap.html#ga34a47cde5a5b38c29f1aa3c5e76943c2">mi_heap_t</a> *heap)</td></tr>
<tr class="memdesc:ga5a34328f846c661aa560f4769cfc15f1"><td class="mdescLeft"> </td><td class="mdescRight"><b>v3</b>: xplicitly merge the statistics of the current heap with the subprocess. <br /></td></tr>
<tr class="separator:ga5a34328f846c661aa560f4769cfc15f1"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ga5ec3f9058eec804924711ab38ba64b51" id="r_ga5ec3f9058eec804924711ab38ba64b51"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="#ga5ec3f9058eec804924711ab38ba64b51">mi_subproc_stats_get</a> (<a class="el" href="group__subproc.html#ga8c0bcd1fee27c7641e9c3c0d991b3b7d">mi_subproc_id_t</a> subproc_id, mi_stats_t *stats)</td></tr>
<tr class="memdesc:ga5ec3f9058eec804924711ab38ba64b51"><td class="mdescLeft"> </td><td class="mdescRight"><b>v3</b>: Get statistics for a given subprocess aggregated over all its heaps. <br /></td></tr>
<tr class="separator:ga5ec3f9058eec804924711ab38ba64b51"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:gad1cf918f08b6506e65ae134423477a0b" id="r_gad1cf918f08b6506e65ae134423477a0b"><td class="memItemLeft" align="right" valign="top">char * </td><td class="memItemRight" valign="bottom"><a class="el" href="#gad1cf918f08b6506e65ae134423477a0b">mi_subproc_stats_get_json</a> (<a class="el" href="group__subproc.html#ga8c0bcd1fee27c7641e9c3c0d991b3b7d">mi_subproc_id_t</a> subproc_id, size_t buf_size, char *buf)</td></tr>
<tr class="memdesc:gad1cf918f08b6506e65ae134423477a0b"><td class="mdescLeft"> </td><td class="mdescRight"><b>v3</b>: Show the subproc statistics aggregated over all its heaps as JSON. <br /></td></tr>
<tr class="separator:gad1cf918f08b6506e65ae134423477a0b"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ga59ec89969837db414a6bce8b58915624" id="r_ga59ec89969837db414a6bce8b58915624"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="#ga59ec89969837db414a6bce8b58915624">mi_subproc_stats_print_out</a> (<a class="el" href="group__subproc.html#ga8c0bcd1fee27c7641e9c3c0d991b3b7d">mi_subproc_id_t</a> subproc_id, <a class="el" href="group__extended.html#gadf31cea7d0332a81c8b882cbbdbadb8d">mi_output_fun</a> *out, void *arg)</td></tr>
<tr class="memdesc:ga59ec89969837db414a6bce8b58915624"><td class="mdescLeft"> </td><td class="mdescRight"><b>v3</b>: Print the subproc statistics aggregated over all its heaps. <br /></td></tr>
<tr class="separator:ga59ec89969837db414a6bce8b58915624"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ga19f1a04bd972e11e4f3b586f25229d5b" id="r_ga19f1a04bd972e11e4f3b586f25229d5b"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="#ga19f1a04bd972e11e4f3b586f25229d5b">mi_subproc_heap_stats_print_out</a> (<a class="el" href="group__subproc.html#ga8c0bcd1fee27c7641e9c3c0d991b3b7d">mi_subproc_id_t</a> subproc_id, <a class="el" href="group__extended.html#gadf31cea7d0332a81c8b882cbbdbadb8d">mi_output_fun</a> *out, void *arg)</td></tr>
<tr class="memdesc:ga19f1a04bd972e11e4f3b586f25229d5b"><td class="mdescLeft"> </td><td class="mdescRight"><b>v3</b>: Print statistics for a given subprocess with each heap separately printed. <br /></td></tr>
<tr class="separator:ga19f1a04bd972e11e4f3b586f25229d5b"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ga6ad266c70a0eabf6c26248aed1af6fa1" id="r_ga6ad266c70a0eabf6c26248aed1af6fa1"><td class="memItemLeft" align="right" valign="top">char * </td><td class="memItemRight" valign="bottom"><a class="el" href="#ga6ad266c70a0eabf6c26248aed1af6fa1">mi_stats_as_json</a> (mi_stats_t *stats, size_t buf_size, char *buf)</td></tr>
<tr class="memdesc:ga6ad266c70a0eabf6c26248aed1af6fa1"><td class="mdescLeft"> </td><td class="mdescRight"><b>v3</b>: Show the given statistics as JSON. <br /></td></tr>
<tr class="separator:ga6ad266c70a0eabf6c26248aed1af6fa1"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ga3bb8468b8cfcc6e2a61d98aee85c5f99" id="r_ga3bb8468b8cfcc6e2a61d98aee85c5f99"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="#ga3bb8468b8cfcc6e2a61d98aee85c5f99">mi_stats_reset</a> (void)</td></tr>
<tr class="memdesc:ga3bb8468b8cfcc6e2a61d98aee85c5f99"><td class="mdescLeft"> </td><td class="mdescRight"><b>v1</b>,<b>v2</b>: Reset statistics. <br /></td></tr>
<tr class="separator:ga3bb8468b8cfcc6e2a61d98aee85c5f99"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ga854b1de8cb067c7316286c28b2fcd3d1" id="r_ga854b1de8cb067c7316286c28b2fcd3d1"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="#ga854b1de8cb067c7316286c28b2fcd3d1">mi_stats_merge</a> (void)</td></tr>
<tr class="memdesc:ga854b1de8cb067c7316286c28b2fcd3d1"><td class="mdescLeft"> </td><td class="mdescRight"><b>v1</b>,<b>v2</b>: Merge thread local statistics with the main statistics and reset. <br /></td></tr>
<tr class="separator:ga854b1de8cb067c7316286c28b2fcd3d1"><td class="memSeparator" colspan="2"> </td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<p>Print out allocation statistics. </p>
<hr/><h2 class="groupheader">Data Structure Documentation</h2>
<a name="structmi__stats__s" id="structmi__stats__s"></a>
<h2 class="memtitle"><span class="permalink"><a href="#structmi__stats__s">◆ </a></span>mi_stats_s</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">struct mi_stats_s</td>
</tr>
</table>
</div><div class="memdoc">
<div class="textblock"><p>Statistics. See <a href="https://github.com/microsoft/mimalloc/blob/main/include/mimalloc-stats.h">include/mimalloc-stats.h</a> for the full definition. </p>
</div><table class="fieldtable">
<tr><th colspan="3">Data Fields</th></tr>
<tr><td class="fieldtype">
<a id="ae41e0fff24b988d0a43c34040b04b887" name="ae41e0fff24b988d0a43c34040b04b887"></a>size_t</td>
<td class="fieldname">
size</td>
<td class="fielddoc">
initialize with <code>sizeof(mi_stats_t)</code> (so linking dynamically with a separately compiled mimalloc is safe) </td></tr>
<tr><td class="fieldtype">
<a id="aa74fc9c40dfaef5e06dec4019c19de68" name="aa74fc9c40dfaef5e06dec4019c19de68"></a>size_t</td>
<td class="fieldname">
version</td>
<td class="fielddoc">
initialize with `MI_STAT_VERSION (so linking dynamically with a separately compiled mimalloc is safe) </td></tr>
</table>
</div>
</div>
<h2 class="groupheader">Macro Definition Documentation</h2>
<a id="gac4411cf3eed23719e511b9e1128888e0" name="gac4411cf3eed23719e511b9e1128888e0"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gac4411cf3eed23719e511b9e1128888e0">◆ </a></span>MI_STAT_VERSION</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define MI_STAT_VERSION</td>
</tr>
</table>
</div><div class="memdoc">
<p>Statistics version. Increased on each backward incompatible change. </p>
</div>
</div>
<a id="ga961d0f9f0327ebc9bd8a0b84f6dcb410" name="ga961d0f9f0327ebc9bd8a0b84f6dcb410"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga961d0f9f0327ebc9bd8a0b84f6dcb410">◆ </a></span>mi_stats_t_decl</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define mi_stats_t_decl</td>
<td>(</td>
<td class="paramtype"></td> <td class="paramname"><span class="paramname"><em>name</em></span></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Helper to declare a properly initialized mi_stats_t() local variable as <em>name</em> where the <em>size</em> and <em>version</em> fields are properly initialized. </p>
<p>For example: </p><div class="fragment"><div class="line"><a class="code hl_define" href="#ga961d0f9f0327ebc9bd8a0b84f6dcb410">mi_stats_t_decl</a>(stats);</div>
<div class="line"><span class="keywordflow">if</span> (<a class="code hl_function" href="#gaa26d5060ad21b1331a150bb92f6f7086">mi_stats_get</a>(&stats)) {</div>
<div class="line"> ...</div>
<div class="line">}</div>
<div class="ttc" id="agroup__stats_html_ga961d0f9f0327ebc9bd8a0b84f6dcb410"><div class="ttname"><a href="#ga961d0f9f0327ebc9bd8a0b84f6dcb410">mi_stats_t_decl</a></div><div class="ttdeci">#define mi_stats_t_decl(name)</div><div class="ttdoc">Helper to declare a properly initialized mi_stats_t() local variable as name where the size and versi...</div><div class="ttdef"><b>Definition</b> mimalloc-doc.h:1050</div></div>
<div class="ttc" id="agroup__stats_html_gaa26d5060ad21b1331a150bb92f6f7086"><div class="ttname"><a href="#gaa26d5060ad21b1331a150bb92f6f7086">mi_stats_get</a></div><div class="ttdeci">bool mi_stats_get(mi_stats_t *stats)</div><div class="ttdoc">Get the statistics for the current subprocess aggregated over all its heaps.</div></div>
</div><!-- fragment -->
</div>
</div>
<h2 class="groupheader">Function Documentation</h2>
<a id="ga2654195cef93ed3613e98b59a19a296f" name="ga2654195cef93ed3613e98b59a19a296f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga2654195cef93ed3613e98b59a19a296f">◆ </a></span>mi_heap_stats_get()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">bool mi_heap_stats_get </td>
<td>(</td>
<td class="paramtype"><a class="el" href="group__heap.html#ga34a47cde5a5b38c29f1aa3c5e76943c2">mi_heap_t</a> *</td> <td class="paramname"><span class="paramname"><em>heap</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">mi_stats_t *</td> <td class="paramname"><span class="paramname"><em>stats</em></span> )</td>
</tr>
</table>
</div><div class="memdoc">
<p><b>v3</b>: Return statistics for a given heap. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">heap</td><td>The heap. </td></tr>
<tr><td class="paramname">stats</td><td>Pointer to a mi_stats_t() structure (declared as <code><a class="el" href="#ga961d0f9f0327ebc9bd8a0b84f6dcb410" title="Helper to declare a properly initialized mi_stats_t() local variable as name where the size and versi...">mi_stats_t_decl(name)</a></code>). </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd><em>true</em> if <em>stats</em> is not <em>NULL</em>, and if <em>stats->size</em> and <em>stats->version</em> match the <code>sizeof(mi_stats_t)</code> and <code>MI_STAT_VERSION</code> with the linked mimalloc version. </dd></dl>
</div>
</div>
<a id="gacb42dede4c38c38f2014b5450c5fcba8" name="gacb42dede4c38c38f2014b5450c5fcba8"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gacb42dede4c38c38f2014b5450c5fcba8">◆ </a></span>mi_heap_stats_get_json()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">char * mi_heap_stats_get_json </td>
<td>(</td>
<td class="paramtype"><a class="el" href="group__heap.html#ga34a47cde5a5b38c29f1aa3c5e76943c2">mi_heap_t</a> *</td> <td class="paramname"><span class="paramname"><em>heap</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t</td> <td class="paramname"><span class="paramname"><em>buf_size</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">char *</td> <td class="paramname"><span class="paramname"><em>buf</em></span> )</td>
</tr>
</table>
</div><div class="memdoc">
<p><b>v3</b>: Get the statistics for a heap as JSON. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">heap</td><td>The heap. </td></tr>
<tr><td class="paramname">buf_size</td><td>Byte size of the buffer <em>buf</em> (or 0 if <em>buf</em> is <em>NULL</em>). </td></tr>
<tr><td class="paramname">buf</td><td>The buffer. Pass <em>NULL</em> to allocate a fresh buffer. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Pointer to the buffer or <em>NULL</em> on failure. Use <a class="el" href="group__malloc.html#gaf2c7b89c327d1f60f59e68b9ea644d95" title="Free previously allocated memory.">mi_free()</a> to free the buffer if the <em>buf</em> parameter was <em>NULL</em>. </dd></dl>
</div>
</div>
<a id="ga5a34328f846c661aa560f4769cfc15f1" name="ga5a34328f846c661aa560f4769cfc15f1"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga5a34328f846c661aa560f4769cfc15f1">◆ </a></span>mi_heap_stats_merge_to_subproc()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void mi_heap_stats_merge_to_subproc </td>
<td>(</td>
<td class="paramtype"><a class="el" href="group__heap.html#ga34a47cde5a5b38c29f1aa3c5e76943c2">mi_heap_t</a> *</td> <td class="paramname"><span class="paramname"><em>heap</em></span></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p><b>v3</b>: xplicitly merge the statistics of the current heap with the subprocess. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">heap</td><td>The heap. After this call, the heap statistics are reset. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="gafea365d7842f5f5bc1f235bbc303d585" name="gafea365d7842f5f5bc1f235bbc303d585"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gafea365d7842f5f5bc1f235bbc303d585">◆ </a></span>mi_heap_stats_print_out()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void mi_heap_stats_print_out </td>
<td>(</td>
<td class="paramtype"><a class="el" href="group__heap.html#ga34a47cde5a5b38c29f1aa3c5e76943c2">mi_heap_t</a> *</td> <td class="paramname"><span class="paramname"><em>heap</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__extended.html#gadf31cea7d0332a81c8b882cbbdbadb8d">mi_output_fun</a> *</td> <td class="paramname"><span class="paramname"><em>out</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">void *</td> <td class="paramname"><span class="paramname"><em>arg</em></span> )</td>
</tr>
</table>
</div><div class="memdoc">
<p><b>v3</b>: Show the heap statistics as JSON. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">heap</td><td>The heap. </td></tr>
<tr><td class="paramname">out</td><td>An output function or <em>NULL</em> for the default. </td></tr>
<tr><td class="paramname">arg</td><td>Optional argument passed to <em>out</em> (if not <em>NULL</em>) </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="ga7d862c2affd5790381da14eb102a364d" name="ga7d862c2affd5790381da14eb102a364d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga7d862c2affd5790381da14eb102a364d">◆ </a></span>mi_process_info()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void mi_process_info </td>
<td>(</td>
<td class="paramtype">size_t *</td> <td class="paramname"><span class="paramname"><em>elapsed_msecs</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t *</td> <td class="paramname"><span class="paramname"><em>user_msecs</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t *</td> <td class="paramname"><span class="paramname"><em>system_msecs</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t *</td> <td class="paramname"><span class="paramname"><em>current_rss</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t *</td> <td class="paramname"><span class="paramname"><em>peak_rss</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t *</td> <td class="paramname"><span class="paramname"><em>current_commit</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t *</td> <td class="paramname"><span class="paramname"><em>peak_commit</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t *</td> <td class="paramname"><span class="paramname"><em>page_faults</em></span> )</td>
</tr>
</table>
</div><div class="memdoc">
<p>Return process information (time and memory usage). </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">elapsed_msecs</td><td>Optional. Elapsed wall-clock time of the process in milli-seconds. </td></tr>
<tr><td class="paramname">user_msecs</td><td>Optional. User time in milli-seconds (as the sum over all threads). </td></tr>
<tr><td class="paramname">system_msecs</td><td>Optional. System time in milli-seconds. </td></tr>
<tr><td class="paramname">current_rss</td><td>Optional. Current working set size (touched pages). </td></tr>
<tr><td class="paramname">peak_rss</td><td>Optional. Peak working set size (touched pages). </td></tr>
<tr><td class="paramname">current_commit</td><td>Optional. Current committed memory (backed by the page file). </td></tr>
<tr><td class="paramname">peak_commit</td><td>Optional. Peak committed memory (backed by the page file). </td></tr>
<tr><td class="paramname">page_faults</td><td>Optional. Count of hard page faults.</td></tr>
</table>
</dd>
</dl>
<p>The <em>current_rss</em> is precise on Windows and MacOSX; other systems estimate this using <em>current_commit</em>. The <em>commit</em> is precise on Windows but estimated on other systems as the amount of read/write accessible memory reserved by mimalloc. </p>
</div>
</div>
<a id="gaf887e7aa75f13242c4e7ab95d8390536" name="gaf887e7aa75f13242c4e7ab95d8390536"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gaf887e7aa75f13242c4e7ab95d8390536">◆ </a></span>mi_process_info_print()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void mi_process_info_print </td>
<td>(</td>
<td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Print out all process info. </p>
<dl class="section see"><dt>See also</dt><dd><a class="el" href="#ga7d862c2affd5790381da14eb102a364d" title="Return process information (time and memory usage).">mi_process_info()</a> </dd></dl>
</div>
</div>
<a id="ga03ac88d3efee2ae7c34f5340502f4732" name="ga03ac88d3efee2ae7c34f5340502f4732"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga03ac88d3efee2ae7c34f5340502f4732">◆ </a></span>mi_process_info_print_out()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void mi_process_info_print_out </td>
<td>(</td>
<td class="paramtype"><a class="el" href="group__extended.html#gadf31cea7d0332a81c8b882cbbdbadb8d">mi_output_fun</a> *</td> <td class="paramname"><span class="paramname"><em>out</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">void *</td> <td class="paramname"><span class="paramname"><em>arg</em></span> )</td>
</tr>
</table>
</div><div class="memdoc">
<p>Print out all process info. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">out</td><td>An output function or <em>NULL</em> for the default. </td></tr>
<tr><td class="paramname">arg</td><td>Optional argument passed to <em>out</em> (if not <em>NULL</em>) </td></tr>
</table>
</dd>
</dl>
<dl class="section see"><dt>See also</dt><dd>mi_process_print() </dd></dl>
</div>
</div>
<a id="ga6ad266c70a0eabf6c26248aed1af6fa1" name="ga6ad266c70a0eabf6c26248aed1af6fa1"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga6ad266c70a0eabf6c26248aed1af6fa1">◆ </a></span>mi_stats_as_json()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">char * mi_stats_as_json </td>
<td>(</td>
<td class="paramtype">mi_stats_t *</td> <td class="paramname"><span class="paramname"><em>stats</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t</td> <td class="paramname"><span class="paramname"><em>buf_size</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">char *</td> <td class="paramname"><span class="paramname"><em>buf</em></span> )</td>
</tr>
</table>
</div><div class="memdoc">
<p><b>v3</b>: Show the given statistics as JSON. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">stats</td><td>The statistics. </td></tr>
<tr><td class="paramname">buf_size</td><td>Byte size of the buffer <em>buf</em> (or 0 if <em>buf</em> is <em>NULL</em>). </td></tr>
<tr><td class="paramname">buf</td><td>The buffer. Pass <em>NULL</em> to allocate a fresh buffer. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Pointer to the buffer or <em>NULL</em> on failure. Use <a class="el" href="group__malloc.html#gaf2c7b89c327d1f60f59e68b9ea644d95" title="Free previously allocated memory.">mi_free()</a> to free the buffer if the <em>buf</em> parameter was <em>NULL</em>. </dd></dl>
</div>
</div>
<a id="gaa26d5060ad21b1331a150bb92f6f7086" name="gaa26d5060ad21b1331a150bb92f6f7086"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gaa26d5060ad21b1331a150bb92f6f7086">◆ </a></span>mi_stats_get()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">bool mi_stats_get </td>
<td>(</td>
<td class="paramtype">mi_stats_t *</td> <td class="paramname"><span class="paramname"><em>stats</em></span></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Get the statistics for the current subprocess aggregated over all its heaps. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">stats</td><td>Pointer to a mi_stats_t() structure (declared as <code><a class="el" href="#ga961d0f9f0327ebc9bd8a0b84f6dcb410" title="Helper to declare a properly initialized mi_stats_t() local variable as name where the size and versi...">mi_stats_t_decl(name)</a></code>). </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd><em>true</em> if <em>stats</em> is not <em>NULL</em>, and if <em>stats->size</em> and <em>stats->version</em> match the <code>sizeof(mi_stats_t)</code> and <code>MI_STAT_VERSION</code> with the linked mimalloc version. </dd></dl>
</div>
</div>
<a id="gadecd549d1a7216af596322ac27e78b0d" name="gadecd549d1a7216af596322ac27e78b0d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gadecd549d1a7216af596322ac27e78b0d">◆ </a></span>mi_stats_get_bin_size()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">size_t mi_stats_get_bin_size </td>
<td>(</td>
<td class="paramtype">size_t</td> <td class="paramname"><span class="paramname"><em>bin</em></span></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p><b>v3</b>: Return the block size for the given bin. </p>
</div>
</div>
<a id="gadaa3be15899cc82e314fa7d3f8e2afbd" name="gadaa3be15899cc82e314fa7d3f8e2afbd"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gadaa3be15899cc82e314fa7d3f8e2afbd">◆ </a></span>mi_stats_get_json()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">char * mi_stats_get_json </td>
<td>(</td>
<td class="paramtype">size_t</td> <td class="paramname"><span class="paramname"><em>buf_size</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">char *</td> <td class="paramname"><span class="paramname"><em>buf</em></span> )</td>
</tr>
</table>
</div><div class="memdoc">
<p>Get the statistics for the current subprocess aggregated over all its heaps as JSON. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">buf_size</td><td>Byte size of the buffer <em>buf</em> (or 0 if <em>buf</em> is <em>NULL</em>) </td></tr>
<tr><td class="paramname">buf</td><td>The buffer. Pass <em>NULL</em> to allocate a fresh buffer. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Pointer to the buffer or <em>NULL</em> on failure. Use <a class="el" href="group__malloc.html#gaf2c7b89c327d1f60f59e68b9ea644d95" title="Free previously allocated memory.">mi_free()</a> to free the buffer if the <em>buf</em> parameter was <em>NULL</em>. </dd></dl>
</div>
</div>
<a id="ga854b1de8cb067c7316286c28b2fcd3d1" name="ga854b1de8cb067c7316286c28b2fcd3d1"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga854b1de8cb067c7316286c28b2fcd3d1">◆ </a></span>mi_stats_merge()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void mi_stats_merge </td>
<td>(</td>
<td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p><b>v1</b>,<b>v2</b>: Merge thread local statistics with the main statistics and reset. </p>
</div>
</div>
<a id="ga2d126e5c62d3badc35445e5d84166df2" name="ga2d126e5c62d3badc35445e5d84166df2"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga2d126e5c62d3badc35445e5d84166df2">◆ </a></span>mi_stats_print()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void mi_stats_print </td>
<td>(</td>
<td class="paramtype">void *</td> <td class="paramname"><span class="paramname"><em>out</em></span></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Deprecated. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">out</td><td>Ignored, outputs to the registered output function or stderr by default.</td></tr>
</table>
</dd>
</dl>
<p>Most detailed when using a debug build. </p>
</div>
</div>
<a id="ga537f13b299ddf801e49a5a94fde02c79" name="ga537f13b299ddf801e49a5a94fde02c79"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga537f13b299ddf801e49a5a94fde02c79">◆ </a></span>mi_stats_print_out()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void mi_stats_print_out </td>
<td>(</td>
<td class="paramtype"><a class="el" href="group__extended.html#gadf31cea7d0332a81c8b882cbbdbadb8d">mi_output_fun</a> *</td> <td class="paramname"><span class="paramname"><em>out</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">void *</td> <td class="paramname"><span class="paramname"><em>arg</em></span> )</td>
</tr>
</table>
</div><div class="memdoc">
<p>Print statistics of the current subprocess aggregated over all its heaps. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">out</td><td>An output function or <em>NULL</em> for the default. </td></tr>
<tr><td class="paramname">arg</td><td>Optional argument passed to <em>out</em> (if not <em>NULL</em>)</td></tr>
</table>
</dd>
</dl>
<p>Most detailed when using a debug build. </p>
</div>
</div>
<a id="ga3bb8468b8cfcc6e2a61d98aee85c5f99" name="ga3bb8468b8cfcc6e2a61d98aee85c5f99"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga3bb8468b8cfcc6e2a61d98aee85c5f99">◆ </a></span>mi_stats_reset()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void mi_stats_reset </td>
<td>(</td>
<td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p><b>v1</b>,<b>v2</b>: Reset statistics. </p>
</div>
</div>
<a id="ga19f1a04bd972e11e4f3b586f25229d5b" name="ga19f1a04bd972e11e4f3b586f25229d5b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga19f1a04bd972e11e4f3b586f25229d5b">◆ </a></span>mi_subproc_heap_stats_print_out()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void mi_subproc_heap_stats_print_out </td>
<td>(</td>
<td class="paramtype"><a class="el" href="group__subproc.html#ga8c0bcd1fee27c7641e9c3c0d991b3b7d">mi_subproc_id_t</a></td> <td class="paramname"><span class="paramname"><em>subproc_id</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__extended.html#gadf31cea7d0332a81c8b882cbbdbadb8d">mi_output_fun</a> *</td> <td class="paramname"><span class="paramname"><em>out</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">void *</td> <td class="paramname"><span class="paramname"><em>arg</em></span> )</td>
</tr>
</table>
</div><div class="memdoc">
<p><b>v3</b>: Print statistics for a given subprocess with each heap separately printed. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">subproc_id</td><td>The subprocess </td></tr>
<tr><td class="paramname">out</td><td>An output function or <em>NULL</em> for the default. </td></tr>
<tr><td class="paramname">arg</td><td>Optional argument passed to <em>out</em> (if not <em>NULL</em>) </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="ga5ec3f9058eec804924711ab38ba64b51" name="ga5ec3f9058eec804924711ab38ba64b51"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga5ec3f9058eec804924711ab38ba64b51">◆ </a></span>mi_subproc_stats_get()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">bool mi_subproc_stats_get </td>
<td>(</td>
<td class="paramtype"><a class="el" href="group__subproc.html#ga8c0bcd1fee27c7641e9c3c0d991b3b7d">mi_subproc_id_t</a></td> <td class="paramname"><span class="paramname"><em>subproc_id</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">mi_stats_t *</td> <td class="paramname"><span class="paramname"><em>stats</em></span> )</td>
</tr>
</table>
</div><div class="memdoc">
<p><b>v3</b>: Get statistics for a given subprocess aggregated over all its heaps. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">subproc_id</td><td>The subprocess </td></tr>
<tr><td class="paramname">stats</td><td>Pointer to a mi_stats_t() structure (declared as <code><a class="el" href="#ga961d0f9f0327ebc9bd8a0b84f6dcb410" title="Helper to declare a properly initialized mi_stats_t() local variable as name where the size and versi...">mi_stats_t_decl(name)</a></code>). </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd><em>true</em> if <em>stats</em> is not <em>NULL</em>, and if <em>stats->size</em> and <em>stats->version</em> match the <code>sizeof(mi_stats_t)</code> and <code>MI_STAT_VERSION</code> with the linked mimalloc version. </dd></dl>
</div>
</div>
<a id="gad1cf918f08b6506e65ae134423477a0b" name="gad1cf918f08b6506e65ae134423477a0b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gad1cf918f08b6506e65ae134423477a0b">◆ </a></span>mi_subproc_stats_get_json()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">char * mi_subproc_stats_get_json </td>
<td>(</td>
<td class="paramtype"><a class="el" href="group__subproc.html#ga8c0bcd1fee27c7641e9c3c0d991b3b7d">mi_subproc_id_t</a></td> <td class="paramname"><span class="paramname"><em>subproc_id</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t</td> <td class="paramname"><span class="paramname"><em>buf_size</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">char *</td> <td class="paramname"><span class="paramname"><em>buf</em></span> )</td>
</tr>
</table>
</div><div class="memdoc">
<p><b>v3</b>: Show the subproc statistics aggregated over all its heaps as JSON. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">subproc_id</td><td>The subprocess. </td></tr>
<tr><td class="paramname">buf_size</td><td>Byte size of the buffer <em>buf</em> (or 0 if <em>buf</em> is <em>NULL</em>). </td></tr>
<tr><td class="paramname">buf</td><td>The buffer. Pass <em>NULL</em> to allocate a fresh buffer. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Pointer to the buffer or <em>NULL</em> on failure. Use <a class="el" href="group__malloc.html#gaf2c7b89c327d1f60f59e68b9ea644d95" title="Free previously allocated memory.">mi_free()</a> to free the buffer if the <em>buf</em> parameter was <em>NULL</em>. </dd></dl>
</div>
</div>
<a id="ga59ec89969837db414a6bce8b58915624" name="ga59ec89969837db414a6bce8b58915624"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga59ec89969837db414a6bce8b58915624">◆ </a></span>mi_subproc_stats_print_out()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void mi_subproc_stats_print_out </td>
<td>(</td>
<td class="paramtype"><a class="el" href="group__subproc.html#ga8c0bcd1fee27c7641e9c3c0d991b3b7d">mi_subproc_id_t</a></td> <td class="paramname"><span class="paramname"><em>subproc_id</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__extended.html#gadf31cea7d0332a81c8b882cbbdbadb8d">mi_output_fun</a> *</td> <td class="paramname"><span class="paramname"><em>out</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">void *</td> <td class="paramname"><span class="paramname"><em>arg</em></span> )</td>
</tr>
</table>
</div><div class="memdoc">
<p><b>v3</b>: Print the subproc statistics aggregated over all its heaps. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">subproc_id</td><td>The subprocess. </td></tr>
<tr><td class="paramname">out</td><td>An output function or <em>NULL</em> for the default. </td></tr>
<tr><td class="paramname">arg</td><td>Optional argument passed to <em>out</em> (if not <em>NULL</em>) </td></tr>
</table>
</dd>
</dl>
</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.11.0 </li>
</ul>
</div>
</body>
</html>