<p>The preferred usage is including <code><mimalloc.h></code>, linking with the shared- or static library, and using the <code>mi_malloc</code> API exclusively for allocation. For example, </p><divclass="fragment"><divclass="line">gcc -o myprogram -lmimalloc myfile.c</div></div><!-- fragment --><p>mimalloc uses only safe OS calls (<code>mmap</code> and <code>VirtualAlloc</code>) and can co-exist with other allocators linked to the same program. If you use <code>cmake</code>, you can simply use: </p><divclass="fragment"><divclass="line">find_package(mimalloc 1.0 REQUIRED)</div></div><!-- fragment --><p> in your <code>CMakeLists.txt</code> to find a locally installed mimalloc. Then use either: </p><divclass="fragment"><divclass="line">target_link_libraries(myapp PUBLIC mimalloc)</div></div><!-- fragment --><p> to link with the shared (dynamic) library, or: </p><divclass="fragment"><divclass="line">target_link_libraries(myapp PUBLIC mimalloc-<spanclass="keyword">static</span>)</div></div><!-- fragment --><p> to link with the static library. See <code>test\CMakeLists.txt</code> for an example.</p>
<h3>C++</h3>
<p>For best performance in C++ programs, it is also recommended to override the global <code>new</code> and <code>delete</code> operators. For convience, mimalloc provides <ahref="https://github.com/microsoft/mimalloc/blob/master/include/mimalloc-new-delete.h"><code>mimalloc-new-delete.h</code></a> which does this for you – just include it in a single(!) source file in your project.</p>
<p>In C++, mimalloc also provides the <code><aclass="el"href="group__cpp.html#structmi__stl__allocator"title="std::allocator implementation for mimalloc for use in STL containers.">mi_stl_allocator</a></code> struct which implements the <code>std::allocator</code> interface. For example: </p><divclass="fragment"><divclass="line">std::vector<some_struct, mi_stl_allocator<some_struct>> vec;</div><divclass="line">vec.push_back(some_struct());</div></div><!-- fragment --><h3>Statistics</h3>
<p>You can pass environment variables to print verbose messages (<code>MIMALLOC_VERBOSE=1</code>) and statistics (<code>MIMALLOC_SHOW_STATS=1</code>) (in the debug version): </p><divclass="fragment"><divclass="line">> env MIMALLOC_SHOW_STATS=1 ./cfrac 175451865205073170563711388363</div><divclass="line"></div><divclass="line">175451865205073170563711388363 = 374456281610909315237213 * 468551</div><divclass="line"></div><divclass="line">heap stats: peak total freed unit</div><divclass="line">normal 2: 16.4 kb 17.5 mb 17.5 mb 16 b ok</div><divclass="line">normal 3: 16.3 kb 15.2 mb 15.2 mb 24 b ok</div><divclass="line">normal 4: 64 b 4.6 kb 4.6 kb 32 b ok</div><divclass="line">normal 5: 80 b 118.4 kb 118.4 kb 40 b ok</div><divclass="line">normal 6: 48 b 48 b 48 b 48 b ok</div><divclass="line">normal 17: 960 b 960 b 960 b 320 b ok</div><divclass="line"></div><divclass="line">heap stats: peak total freed unit</div><divclass="line"> normal: 33.9 kb 32.8 mb 32.8 mb 1 b ok</div><divclass="line"> huge: 0 b 0 b 0 b 1 b ok</div><divclass="line"> total: 33.9 kb 32.8 mb 32.8 mb 1 b ok</div><divclass="line">malloc requested: 32.8 mb</div><divclass="line"></div><divclass="line"> committed: 58.2 kb 58.2 kb 58.2 kb 1 b ok</div><divclass="line"> reserved: 2.0 mb 2.0 mb 2.0 mb 1 b ok</div><divclass="line"> reset: 0 b 0 b 0 b 1 b ok</div><divclass="line"> segments: 1 1 1</div><divclass="line">-abandoned: 0</div><divclass="line"> pages: 6 6 6</div><divclass="line">-abandoned: 0</div><divclass="line"> mmaps: 3</div><divclass="line"> mmap fast: 0</div><divclass="line"> mmap slow: 1</div><divclass="line"> threads: 0</div><divclass="line"> elapsed: 2.022s</div><divclass="line"> process: user: 1.781s, system: 0.016s, faults: 756, reclaims: 0, rss: 2.7 mb</div></div><!-- fragment --><p>The above model of using the <code>mi_</code> prefixed API is not always possible though in existing programs that already use the standard malloc interface, and another option is to override the standard malloc interface completely and redirect all calls to the <em>mimalloc</em> library instead.</p>