开源 内存分配器 mimalloc 在 windwos 的编译及使用

说明

网上关于这个牛逼的开源库教程很少,所以我写了一个我的理解
这里只谈论动态加载mimalloc完成内存分配器全局替换的办法
这样做,可以把你程序所有依赖的dll,的内存分配器都重定向到mimalloc,无需修改代码

mimalloc 的编译

源代码编译

下载mimalloc
在这里插入图片描述
vs2022打开方案,编译即可
在这里插入图片描述
上图即为需要的模块

使用

如果你的项目是多个dll组成,只需要在主程序属性管理器中配置即可
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
将mimalloc.dll\mimalloc-redirect.dll放在软件根目录

确认mimalloc.dll是首个加载

在这里插入图片描述

CMD中运行minject -l xxx.exe,查看是否第一个加载的是mimalloc.dll.
在这里插入图片描述
如上图(忽略名称,因为我是cmake编译),第一个加载就正常
然后在cmd中设置:set MIMALLOC_VERBOSE=1
运行程序
在这里插入图片描述
出现“mimalloc is redirected”即为正常运行.
为什么必须首个加载请查看文档 Dynamic Override on Windows

原理理解

issues #1101
在 Windows 上,由于每个 DLL/EXE(模块)都有自己的命名空间,因此C++中,应该在每个模块的某个 .cpp 文件中包含 #include < mimalloc-new-delete.h> 一次,以替换默认的 new/delete 实现以获得更好的性能。
但是,即使你没有包含 mimalloc-new-delete.h,基本的 malloc/free 拦截和替换是通过 mimalloc-redirect.dll 实现的,所以 mimalloc 的 malloc/free 仍然会被使用,只是在new\delete性能上不如#include < mimalloc-new-delete.h>.

在 Unix 系统上,在编译 mimalloc 时启用 MI_OVERRIDE=ON 就足够了,并且不需要包含 #include < mimalloc-new-delete.h>。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值