当前位置: 首页 > news >正文

开源 内存分配器 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>。

http://www.xdnf.cn/news/999091.html

相关文章:

  • Unity json解析选择实测
  • xhtml2pdf中文屏幕溢出问题
  • SpringBoot后端开发知识点总结(持续更新)
  • 《棒球万事通》棒球战术介绍·棒球1号位
  • 在rust中执行命令行输出中文乱码解决办法
  • android:foregroundServiceType详解
  • 亚马逊云服务器(AWS)会限制用户使用吗?深度解读AWS资源政策
  • 用idea进行数据同步
  • List ToMap优化优化再优化到极致
  • 成功解决 ValueError: Unable to find resource t64.exe in package pip._vendor.distlib
  • 51la无法统计IP?悟空统计精准IP归属地
  • 模板字符串使用点击事件【VUE3】
  • 使用Ollama+open-webui搭建本地AI模型
  • 榕壹云信用租赁系统:免押金全品类租赁解决方案,区块链+多因子认证赋能
  • 财政部长斯科特·贝森特预测,美元支持的稳定币将达到 2 万亿美元
  • [C++11] : 谈谈包装器和lambda表达式,仿函数,bind的坑
  • 分布式MQTT客户端看门狗机制设计与实现
  • ShardingSphere解析:分布式数据库中间件的分片设计与事务管理实践
  • react实现axios 的简单封装
  • 单链表经典算法
  • 【鸿蒙开发】组件动态创建
  • Linux检验库是否安装成功
  • 多线程(4)
  • 【大模型】实践之1:macOS一键部署本地大模型
  • std::make_shared简化智能指针 `std::shared_ptr` 的创建过程,并提高性能(减少内存分配次数,提高缓存命中率)
  • Tomcat 和 Spring MVC
  • SQL进阶之旅 Day 29:NoSQL结合使用策略
  • docker-自动启动java 包
  • 使用VSCode开发FastAPI指南
  • Python 实现 Web 请求与响应