运行时库ML\MT\MD的区分和优劣

原创 2016年06月01日 21:22:03

   VC项目属性→配置属性→C/C++→代码生成→运行时库 可以采用的方式有:多线程(/MT)、多线程调试(/MTd)、多线程DLL(/MD)、多线程调试DLL(/MDd)、单线程(/ML)、单线程调试(/MLd)

VC运行时库 - 秒大刀 - 秒大刀的城堡

Reusable Library Switch Library Macro(s) Defined
Single Threaded /ML LIBC (none)
Static MultiThread /MT LIBCMT _MT
Dynamic Link (DLL) /MD MSVCRT _MT and _DLL
Debug Single Threaded /MLd LIBCD _DEBUG
Debug Static MultiThread /MTd LIBCMTD _DEBUG and _MT
Debug Dynamic Link (DLL) /MDd MSVCRTD _DEBUG, _MT, and _DLL

    其中以小写“d”结尾的选项表示的DEBUG版本的,没有“d”的为RELEASE版本。大型项目中必须要求所有组件和第三方库的运行时库是统一的,否则将会出现LNK2005井喷。

    单线程运行时库选项/ML和/MLd在VS2003以后就被废了。

    /MT和/MTd表示采用多线程CRT库的静态lib版本。该选项会在编译时将运行时库以静态lib的形式完全嵌入。该选项生成的可执行文件运行时不需要运行时库dll的参加,会获得轻微的性能提升,但最终生成的二进制代码因链入庞大的运行时库实现而变得非常臃肿。当某项目以静态链接库的形式嵌入到多个项目,则可能造成运行时库的内存管理有多份,最终将导致致命的“Invalid Address specified to RtlValidateHeap”问题。另外托管C++和CLI中不再支持/MT和/MTd选项。

    /MD和/MDd表示采用多线程CRT库的动态dll版本,会使应用程序使用运行时库特定版本的多线程DLL。链接时将按照传统VC链接dll的方式将运行时库MSVCRxx.DLL的导入库MSVCRT.lib链接,在运行时要求安装了相应版本的VC运行时库可再发行组件包(当然把这些运行时库dll放在应用程序目录下也是可以的)。 因/MD和/MDd方式不会将运行时库链接到可执行文件内部,可有效减少可执行文件尺寸。当多项目以MD方式运作时,其内部会采用同一个堆,内存管理将被简化,跨模块内存管理问题也能得到缓解。

    结论:/MD和/MDd将是潮流所趋,/ML和/MLd方式请及时放弃,/MT和/MTd在非必要时最好也不要采用了。

版权声明:本文为博主原创文章,未经博主允许不得转载。

Windows编程 MD(d)、MT(d)编译选项的区别

1、编译选项的位置 以VS2005为例,这样子打开: 1)         打开项目的Property Pages对话框 2)         点击左侧C/C++节 3)         点击Code...

多线程MT和多线程MD的区别

遇到问题:在编写DLL的过程中,一个接口在执行return之后,出现崩溃,崩溃出现在HeapFree这里。 解决办法:更改工程属性,C/C++——代码生成——运行库,由多线程(/MT)修改为...

VC使用动态库关于/MD与/MT的一个坑

项目中使用一个动态库,导出了一个方法void Test(string tt); 这个方法包含一个string类型的参数。 在测试项目1中使用该动态库的Test导出方法,无论如何都会在释放参数tt的时候...
  • pc0de
  • pc0de
  • 2016年07月28日 20:21
  • 1682

log4CXX在windows上编译与应用

转自:http://blog.csdn.net/mr0pengpeng/article/details/20727753 Log4cxx是开放源代码项目Apache Logging Se...

log4cxx库内存泄露解决办法

背景 公司的系统使用log4cxx作为日志库,近期将程序迁移到Linux环境,结果发现非常严重的内存泄露。经过分析,将内存定位到log4cxx。使用的版本为0.9.7 分析 分析log4cxx库发现,...
  • gwj239
  • gwj239
  • 2013年07月19日 16:53
  • 1571

/MT /MD /ML /MTd /MDd /MLd 的区别(C 运行时库)

参考资料:1.http://www.cnblogs.com/cswuyg/archive/2012/02/03/2336424.html 2.http://www.tuicool.com/artic...

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

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

关于VS运行时库的选择(MDd,MD,MTd,MT,ML,MLD的使用)

转载自:http://blog.sina.com.cn/s/blog_5e9e98210101h0y7.html  /ML、/MLd、/MT、/MTd、/MD、/MDd这几个选项告诉编译器应用程序想...

VC运行时库/MD、/MDd、/MT、/MTd说明

VC项目属性—>配置属性→C/C++→代码生成→运行时库 可以采用的方式有:多线程(/MT)、多线程调试(/MTd)、多线程DLL(/MD)、多线程调试DLL(/MDd)、单线程(/ML)、单线程调试...

Qt在pro中设置运行时库MT、MTd、MD、MDd,只适合VS版本的Qt

一.在pro中设置运行时库 最近在用Qt5.6.0(VS2013版本)调用一份用Visual Studio 2013编译的Debug版本静态库时出现如下错误:  error: LNK2038: 检测到...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:运行时库ML\MT\MD的区分和优劣
举报原因:
原因补充:

(最多只允许输入30个字)