VS在 属性页的 C/C++ -> Code Generation -> Runtime Library 一项中总共有四个选项 /MD 与 /MT、/MTD与/MDD,它们分别有什么区别?
1、/MD 与 /MT 用于Release 版本,前者表示链接时,不链接VC的运行时库(msvcrt.lib),而采用动态库(msvcrtXX.dll,其中XX表示使用的版本);相应地,后者则表示静态链接VC的运行时库,这样的结果是链接生成的的目标模块体积明显比前者要大一些。
2、/MDD与/MTD 用于Debug版本,其它规则同上。
3、除了在是动、静态链接VC运行时库上有区别,另外的区别点在于,采用静态链接的方式将导致生成的目标模块拥有独立的堆栈空间,如果生成的是DLL,那意味着调用该DLL的EXE程序与该DLL有着不同的堆栈空间,如果发生了EXE拿到了在DLL中分配内存创建的对象,在EXE对其进行析构时,就会导致内存非法访问,出现类似于“windows已在XX.exe中触发一个断点……”的错误。所以,尽量不要使用 /MT与/MTD进行静态运行时库链接的方式,即使要使用,也一定要遵循“谁申请,谁释放”的原则。但是该原则在使用类时很难遵循,因为类中可能会有申请内存的动作。
4、采用第1点静态链接时,如果生成的模块拿给别人使用,别人若使用了不同版本的编译器,则会在链接时产生一系列问题,比如经常需要手动忽略 msvcrt.lib这个库。具体会导致的问题此处不做研究。
5、以上第3点系网上查阅得知,未经验证,需要通过阅读《核心编程》来验证该问题。
6、另外,多模块程序的内存空间很值得推敲研究。但Linux下貌似不存在这些问题。
---------------------------------------------------------------------------------
参考链接
动态链接库中分配内存引起的问题-- windows已在XX.exe中触发一个断点 - minggoddess - 博客园
/MT、/MD编译选项,以及可能引起在不同堆中申请、释放内存的问题 - 烛秋 - 博客园

/MD 与 /MT、/MTD与/MDD的区别相关推荐

  1. VS 编译时 /MD 与 /MT、/MTD与/MDD的区别

    VS在 属性页的 C/C++ -> Code Generation -> Runtime Library 一项中总共有四个选项 /MD 与 /MT./MTD与/MDD,它们分别有什么区别? ...

  2. /MD与/MT、/MTD与/MDD的区别

    /MD 使应用程序使用运行时库的多线程并特定于DLL 的版本.定义 _MT 和 _DLL,并使编译器将库名 MSVCRT.lib 放入 .obj文件中.用此选项编译的应用程序静态链接到MSVCRT.l ...

  3. MTd与MDd的区别

    C++ 程序修改或移植过程中有时出现编译错误,比如"链接错误,****__crt__**** ", 修改"项目 -> C/C++ ->代码生成 -> 运 ...

  4. VC编译选项 /ML /MLd /MT /MTd /MD /MDd之间的区别

    VC编译选项 /ML /MLd /MT /MTd /MD /MDd之间的区别 VC编译选项 多线程(/MT) 多线程调试(/MTd) 多线程 DLL (/MD) 多线程调试 DLL (/MDd) C ...

  5. visual studio运行时库MT、MTd、MD、MDd 的区别

    msdn上面的解释: MT:mutithread,多线程库,编译器会从运行时库里面选择多线程静态连接库来解释程序中的代码,即连接LIBCMT.lib库 MTd:mutithread+debug,多线程 ...

  6. /MD, /MDD, /ML, /MT,/MTD(使用运行时库)

    1. VC编译选项 多线程(/MT) 多线程调试(/MTd) 多线程 DLL (/MD) 多线程调试 DLL (/MDd) 2. C 运行时库                              ...

  7. md /mdd /ml /mt/mtd

    From: http://www.cnblogs.com/eddyshn/archive/2009/11/23/1608823.html VC编译选项 多线程(/MT) 多线程调试(/MTd) 多线程 ...

  8. /MD, /MDD, /ML, /MT,/MTD(使用运行时库) .

    1. VC编译选项 多线程(/MT) 多线程调试(/MTd) 多线程 DLL (/MD) 多线程调试 DLL (/MDd) 2. C 运行时库                              ...

  9. vs编译c语言停止工作运行库mt,vc++编译时运行库选择(/MT/MTd/MD/MDd)

    vc++编译时运行库选择(/MT/MTd/MD/MDd) vc++编译时运行库选择(/MT./MTd./MD./MDd) 在vs中,项目属性 ->C/C++ ->代码生成 ->运行库 ...

最新文章

  1. C# textBox1.Append/Text实现换行
  2. deeplab运行指南
  3. mysql下载了解压版怎么_教你安装Mysql(解压版/非安装包)图文教程
  4. JDK 10的摘要Javadoc标签
  5. idea如何连接本地mysql_IDEA如何连接MYSQL
  6. UVA - 1592:Database
  7. LeetCode 594. 最长和谐子序列(map)
  8. (idea)设置鼠标移到类、方法、变量上时,显示相关提示信息
  9. raspberrypi 与 arduino 使用 nRF24L01+ 通信 -- arduino为接收端
  10. LocED-Location-aware Energy Disggregation Framework
  11. java webview事件_捕获“页面已完成加载”事件,并使用xwalk Webview在ionic / cordova MainActivity.java中进行操作...
  12. 一阶倒立摆的起摆与稳摆simulink仿真
  13. vue 机场引导_vue2旅客引导平台
  14. android实现手机号验证码注册
  15. Openwrt 安全模式failsafe分析
  16. 禁止收录与跟踪-- Robots 文件优化和Nofollow 优化
  17. Android仿微信通讯录
  18. 火车票订票小助手,帮助了很多同事和朋友,安全无毒
  19. 基于JAVA准妈妈孕期交流平台计算机毕业设计源码+系统+lw文档+部署
  20. 天猫精灵智能设备对接(3)

热门文章

  1. 南阳OJ独木舟上的旅行
  2. 3dmax文件保存后超大怎么缩小?想学3D建模,还没软件速来领取
  3. 医生一句话,6岁女娃的视力从0.15回到1.0!
  4. win10的怎么调计算机亮度,Win10系统调节屏幕亮度的三种方法【图文】
  5. ACM/ICPC 2017 Nanning Regional 总结
  6. 计算机 硕士 技术路线,(最新整理)硕士开题报告技术路线图
  7. 百年辉煌师心向党 · 德高道厚幸福敬中——2021年石家庄敬业中学教师节庆祝大会
  8. 牛客网 D-图图(广搜)
  9. 解决Flash Helper Service老是弹出流氓广告
  10. [内附完整源码和文档] 基于JSP网上招聘系统的设计与实现