2019独角兽企业重金招聘Python工程师标准>>>

VC++中有六种Runtime Library的类型:

类型 简称 含义 对应的库名称 备注
Single-Threaded /ML Release版的单线程静态库 libc.lib VS2003以后被废弃
Single-Threaded Debug /MLd Debug版的单线程静态库 libcd.lib VS2003以后被废弃
Multi-threaded /MT Release版的多线程静态库 libcmt.lib
Multi-threaded Debug /MTd Debug版的多线程静态库 libcmtd.lib
Multi-threaded DLL /MD Release版的多线程动态库 msvcrt.lib+msvcrtxx.dll
Multi-threaded DLL Debug MDd Debug版的多线程动态库 msvcrtd.lib+msvcrtxxd.dll

你可以在VS的安装目录下找到这些库文件,如我的VS2010安装在C:\Program Files (x86)\Microsoft Visual Studio 10.0,则可以在C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\lib\和C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\lib\amd64\中分别找到对应32位和64位的libcmt.lib、libcmtd.lib、msvcrt.lib、 msvcrtd.lib库。libc.lib和libcd.lib由于在VS2005就已经废弃了,所以在这肯定找不到。

通过上面的表格你会发现,多线程的动态运行时库是|msvcrt.lib+msvcrtxx.dll,之所以是msvcrtxx.dll是因为每一 个版本的VS使用的库名称还不一样。而且还不止包含一个库,除了主要的MSVCRT库外,还有MSVCPRT、MSVCIRT库。它们之间的对应关系如 下:

导入库 MSVCRT.LIB MSVCRTD.LIB MSVCPRT.LIB MSVCPRTD.LIB MSVCIRT.LIB MSVCIRTD.LIB
Visual C++ 5.0 MSVCRT.DLL MSVCRTD.DLL MSVCP5.DLL MSVCP5D.DLL MSVCIRT.DLL MSVCIRTD.DLL
Visual C++ 6.0 MSVCRT.DLL MSVCRTD.DLL MSVCP6.DLL MSVCP6D.DLL MSVCIRT.DLL MSVCIRTD.DLL
Visual C++ .NET 2002 MSVCR70.DLL MSVCR70D.DLL MSVCP70.DLL MSVCP70D.DLL
Visual C++ .NET 2003 MSVCR71.DLL MSVCR71D.DLL MSVCP71.DLL MSVCP71D.DLL
Visual C++ 2005 MSVCR80.DLL MSVCR80D.DLL MSVCP80.DLL MSVCP80D.DLL
Visual C++ 2008 MSVCR90.DLL MSVCR90.DLL MSVCP90.DLL MSVCP90D.DLL
Visual C++ 2010 MSVCR100.DLL MSVCR100D.DLL MSVCP100.DLL MSVCP100D.DLL

参考阅读:https://support.microsoft.com/en-us/kb/154753

在你的VS安装目录下(如C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\redist\x64\Microsoft.VC100.CRT),及系统目录C:\Windows\System32、C: \Windows\SysWOW64下都能找到对应的.dll库。

很多的软件在发布自己的产品时也都会带上这些DLL(防止用户的操作系统没有安装VS,或在系统目录下找不到对应的DLL),如我电脑上的百度影音 安装目录下就有MSVCR71.DLL(C:\Program Files (x86)\baidu\BaiduPlayer\4.1.2.286\MSVCR71.DLL),WPS的安装目录下有msvcr100.dll(C: \Program Files (x86)\WPS Office\9.1.0.5132\wtoolex\msvcr100.dll)和msvcp100.dll(C:\Program Files (x86)\WPS Office\9.1.0.5132\wtoolex\msvcp100.dll)

(1). 静态链接的单线程库
静态链接的单线程库只能用于单线程的应用程序, C 运行时库的目标代码最终被编译在应用程序的二进制文件中。通过 /ML 编译选项可以设置 Visual C++ 使用静态链接的单线
程库。
(2). 静态链接的多线程库
静态链接的多线程库的目标代码也最终被编译在应用程序的二进制文件中,但是它可以在多线程程序中使用。通过 /MT 编译选项可以设置 Visual C++ 使用静态链接的多线程库。
该选项生成的可执行文件运行时不需要运行时库dll的参加,会获得轻微的性能提升,但最终生成的二进制代码因链入庞大的运行时库实现而变得非常臃肿。当某 项目以静态链接库的形式嵌入到多个项目,则可能造成运行时库的内存管理有多份,最终将导致致命的“Invalid Address specified to RtlValidateHeap”问题。
(3). 动态链接的运行时库
动态链接的运行时库将所有的 C 库函数保存在一个单独的动态链接库 MSVCRTxx.DLL 中, MSVCRTxx.DLL 处理了多线程问题。使用 /MD 编译选项可以设置 Visual C++ 使用动态。
链接时将按照传统VC链接dll的方式将运行时库MSVCRxx.DLL的导入库MSVCRT.lib链接,在运行时要求安装了相应版本的VC运行时库可 再发行组件包(当然把这些运行时库dll放在应用程序目录下也是可以的)。 因/MD和/MDd方式不会将运行时库链接到可执行文件内部,可有效减少可执行文件尺寸。当多项目以MD方式运作时,其内部会采用同一个堆,内存管理将被 简化,跨模块内存管理问题也能得到缓解。

/MDd 、 /MLd 或 /MTd 选项使用 Debug runtime library( 调试版本的运行时刻函数库 ) ,与 /MD 、 /ML 或 /MT 分别对应。 Debug 版本的 Runtime Library 包含了调试信息,并采用了一些保护机制以帮助发现错误,加强了对错误的检测,因此在运行性能方面比不上 Release 版本。

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

转载于:https://my.oschina.net/ucliaohh/blog/629743

VC++六种Runtime Library相关推荐

  1. VC++ 六种 Runtime Library

    VC++ 中有六种 Runtime Library 的类型: 类型 简称 含义 对应的库名称 备注 Single-Threaded /ML Release 版的单线程静态库 libc.lib VS20 ...

  2. c++——vc++中的六种Runtime Library的类型

  3. 带你玩转Visual Studio(八)——带你跳出坑爹的Runtime Library坑

    在Windows下进行C++的开发,不可避免的要与Windows的底层库进行交互,然而VS下的一项设置MT.MTd.MD和MDd却经常让人搞迷糊,相信不少人都被他坑过,特别是你工程使用了很多第三库的时 ...

  4. C Runtime Library 的来历

    由于我看到的文章也是转载的且未提供原文链接,所以这里没有提供原文链接,深表抱歉! msvcrt.dll (名称:Microsoft C Runtime Library)提供了printf,malloc ...

  5. C Runtime Library来历, API, MFC, ATL关系

    首先说明,我google了半天,想找到英文的关于这个资料,但是实在找不到,只好转载国人的讨论. CRT原先是指Microsoft开发的C Runtime Library,用于操作系统的开发及运行.后来 ...

  6. CRT(C Runtime Library)—— C/C++运行时库

    C runtime library(part of the C standard library) 任何一个 C 程序,它的背后都有一套庞大的代码来进行支撑,使得该程序得以运行在更高级别上,而不必担心 ...

  7. C Runtime Library 与 STL

    C Runtime Library 的来历 msvcrt.dll (名称:Microsoft C Runtime Library)提供了printf,malloc,strcpy等C语言库函数,并且为使 ...

  8. Glibc辅助运行库 (C RunTime Library): crt0.o,crt1.o,crti.o crtn.o,crtbegin.o crtend.o

    crt1.o, crti.o, crtbegin.o, crtend.o, crtn.o 等目标文件和daemon.o(由我们自己的C程序文件产生)链接成一个执行文件.前面这5个目标文件的作用分别是启 ...

  9. Microsoft Visual C++ Runtime Library Runtime Error的解决的方法

    打开浏览器时,出现Microsoft Visual C++ Runtime Library Runtime Error错误,初步预计是软件冲突,可能有多种出错的方式,我的是浏览器自己主动关闭. 一. ...

最新文章

  1. PEP8 Python
  2. 从DCGAN到SELF-MOD:GAN的模型架构发展一览
  3. 第十六届全国大学生智能车竞赛报名信息统计
  4. (Leetcode)买股票的最佳时机
  5. Unix下C程序内存泄露检测工具:valgrind的安装使用
  6. [转帖]Cookies和Session的区别和理解
  7. 微信开发者接入php,微信开发系之新手接入指南
  8. 蚂蚁金服:开源增强版 SpringBoot 的研发框架!
  9. paip.jquery ajax 请求JSON数据填充SELECT全过程纪录
  10. 阿里巴巴对外开源液冷数据中心技术
  11. 谷歌开源 Embedding Projector 高维数据可视化--转自开源中国
  12. 常见视频分辨率及码率
  13. 推荐四款在线富文本编辑器
  14. 中软酒店管理系统CSHIS操作手册_数据结构_数据字典
  15. 科学计数法符号e 自然常数e
  16. Android腾讯广告联盟接入-----开屏广告
  17. 怎么连接云服务器共享文件夹,如何设置局域网共享文件夹
  18. php编写解一元一次方程,解释C语言(逐句) 解一元一次方程的 怎样用C语言编一个解一元二次方程的程序?...
  19. 老铁啊,我同你讲, 这年头不会点 Git 真不行!!!
  20. 上传文件500 -内部服务器错误,怎样上传文件

热门文章

  1. Python开发【第五篇】迭代器、生成器、递归函数、二分法
  2. ubuntu14.04使用MySQL数据库安装配置Hive 1.2.1
  3. ios category类别的使用
  4. PMI、砺志咨询活动:项目经理软技能征文大赛—15个PDU、免费软技能培训
  5. 诗与远方:无题(三十)- 凄凉缘空
  6. binlog日志_mysql的binlog日志的自动定时清理
  7. c++用什么软件编程_学习编程用什么做笔记比较好?
  8. Win7 64位系统,使用(IME)模式VS2010 编写 和 安装 输入法 教程(1)
  9. nginx虚拟主机配置和反向代理
  10. 生产环境下,oracle不同用户间的数据迁移。第三部分