mi-malloc 1.8/2.1
 
正在加载...
正在搜索...
无匹配项
使用库

构建

首选用法是包含 <mimalloc.h>,链接共享或静态库,并专门使用 mi_malloc API 进行分配。例如,

gcc -o myprogram -lmimalloc myfile.c

mimalloc 仅使用安全的操作系统调用(mmapVirtualAlloc),并且可以与链接到同一程序的其他分配器共存。如果您使用 cmake,您可以简单地在 CMakeLists.txt 中使用

find_package(mimalloc 2.1 REQUIRED)

来查找本地安装的 mimalloc。然后使用

target_link_libraries(myapp PUBLIC mimalloc)

来链接共享(动态)库,或者

target_link_libraries(myapp PUBLIC mimalloc-static)

来链接静态库。有关示例,请参见 test\CMakeLists.txt

C++

为了在 C++ 程序中获得最佳性能,还建议重载全局 newdelete 运算符。为方便起见,mimalloc 提供了 mimalloc-new-delete.h,它可以为您完成此操作——只需将其包含在您项目中的单个(!)源文件中。

在 C++ 中,mimalloc 还提供了 mi_stl_allocator 结构,它实现了 std::allocator 接口。例如

std::vector<some_struct, mi_stl_allocator<some_struct>> vec;
vec.push_back(some_struct());

统计

您可以传递环境变量来打印详细消息(MIMALLOC_VERBOSE=1)和统计信息(MIMALLOC_SHOW_STATS=1)(在调试版本中)

> env MIMALLOC_SHOW_STATS=1 ./cfrac 175451865205073170563711388363
175451865205073170563711388363 = 374456281610909315237213 * 468551
堆统计:峰值 总计 释放 单元
normal 2: 16.4 kb 17.5 mb 17.5 mb 16 b ok
normal 3: 16.3 kb 15.2 mb 15.2 mb 24 b ok
normal 4: 64 b 4.6 kb 4.6 kb 32 b ok
normal 5: 80 b 118.4 kb 118.4 kb 40 b ok
normal 6: 48 b 48 b 48 b 48 b ok
normal 17: 960 b 960 b 960 b 320 b ok
堆统计:峰值 总计 释放 单元
normal: 33.9 kb 32.8 mb 32.8 mb 1 b ok
huge: 0 b 0 b 0 b 1 b ok
total: 33.9 kb 32.8 mb 32.8 mb 1 b ok
malloc requested: 32.8 mb
committed: 58.2 kb 58.2 kb 58.2 kb 1 b ok
reserved: 2.0 mb 2.0 mb 2.0 mb 1 b ok
reset: 0 b 0 b 0 b 1 b ok
segments: 1 1 1
-abandoned: 0
pages: 6 6 6
-abandoned: 0
mmaps: 3
mmap fast: 0
mmap slow: 1
threads: 0
elapsed: 2.022s
process: user: 1.781s, system: 0.016s, faults: 756, reclaims: 0, rss: 2.7 mb

然而,在使用标准 malloc 接口的现有程序中,上述使用 mi_ 前缀 API 的模型并不总是可行,另一种选择是完全重载标准 malloc 接口并将所有调用重定向到 mimalloc 库。

有关更多信息,请参阅 重载 Malloc