VC C运行时库(CRTL)的几个版本及选用
Michael 2006年7月27日于突尼斯

VC++ C运行时库(以下简称CRTL)是指LIBC.LIB/LIBCMT.LIB/MSVCRT.LIB以及他们对应的DEBUG版本(在名称后面加"D")。
在VC++ 4.2以前的版本中CRTL包含了C++的iostream库函数,但是在4.2及以后的版本中(添加了对C++标准库的支持),iostream库函数被独立出来,为支持老的iostream和新的标准iostream函数,4.2及后续版本存在两套iostream库,分别是(老的)LIBCI.LIB/LIBCIMT.LIB/MSVCIRT.LIB和(新的)LIBCP.LIB/LIBCPMT.LIB /MSVCPRT.LIB。针对DEBUG版本,分别存在名称后加"D"的对应库。并且新老的iostream库是不兼容的,不能在同一个应用中混合使用。

一 版本特性列表
对CRTL的几个版本及特性列表(RELEASE&DEBUG Version)如下:
RELEASE版本:

CRTL (without iostream) 特性 VC编译选项 预编译宏
LIBC.LIB Single threaded, static link /ML
LIBCMT.LIB Multithreaded, static link /MT _MT
MSVCRT.LIB Multithreaded, dynamic link (import library for MSVCRT.DLL),对于不同的VC版本对应的DLL名称不一:
VC1.0-MSVCRT10.DLL
VC2.0-MSVCRT20.DLL
VC4.0-MSVCRT40.DLL
VC4.2-MSVCRT.DLL
VC5.0-MSVCRT.DLL
VC6.0-MSVCRT.DLL
/MD _MT, _DLL
Standard C++ Library Characteristics Option Defined
LIBCP.LIB Single threaded, static link /ML
LIBCPMT.LIB Multithreaded, static link /MT _MT
MSVCPRT.LIB Multithreaded, dynamic link (import library for MSVCRT.DLL),对于不同的VC版本对应的DLL名称不一:
VC4.2-MSVCPRT.DLL
VC5.0-MSVCP50.DLL
VC6.0-MSVCP60.DLL
/MD _MT, _DLL
Old Iostream Library Characteristics Option Defined
LIBCI.LIB Single threaded, static link /ML
LIBCIMT.LIB Multithreaded, static link /MT _MT
MSVCIRT.LIB Multithreaded, dynamic link (import library for MSVCIRT.DLL) /MD _MT, _DLL

DEBUG版本:

CRTL(without iostream) Characteristics Option Defined
LIBCD.LIB Single-threaded, static link /MLd _DEBUG
LIBCMTD.LIB Multithreaded, static link /MTd _DEBUG, _MT
MSVCRTD.LIB Multithreaded, dynamic link
(import library for MSVCRxD.DLL)1
/MDd _DEBUG, _MT, _DLL
1   In place of the “x” in the DLL name, substitute the major version numeral of Visual C++ that you are using. For example, if you are using Visual C++ version 4, then the library name would be MSVCR40D.DLL.
Standard C++ Debug Library Characteristics Option Defined
LIBCPD.LIB Single-threaded, static link /MLd _DEBUG
LIBCPMTD.LIB Multithreaded, static link /MTd _DEBUG, _MT
MSVCPRTD.LIB Multithreaded, dynamic link (import library for MSVCRTD.DLL),对于不同的VC版本对应的DLL名称不一:
VC4.2-MSVCPRTD.DLL
VC5.0-MSVCP50D.DLL
VC6.0-MSVCP60D.DLL
/MDd _DEBUG, _MT, _DLL
iostream Debug Library Characteristics Option Defined
LIBCID.LIB Single threaded, static link /MLd _DEBUG
LIBCIMTD.LIB Multithreaded, static link /MTd _DEBUG, _MT
MSVCIRTD.LIB Multithreaded, dynamic link (import library for MSVCIRTD.DLL) /MDd _DEBUG, _MT, _DLL


二 单线程(Single threaded)和多线程(Multithreaded)的区别

简单地说,单线程版本提供的CRTL函数不是可重入(Re-entrant)的(只有少部分函数是可重入),多线程版本提供的CRTL函数是可重入的。
对于多线程应用程序来说,如果使用单线程的CRTL将可能导致数据崩溃,因为在同一时间可能有多个线程同时访问CRTL函数中的某个静态数据,这个数据在单线程CRTL中不受保护(如果访问的是栈数据,则没有问题,因为栈的数据在每个独立线程中分配)。所以,此时需要使用多线程的CRTL,如果坚持使用单线程CRTL,应用程序必须亲自对数据共享访问进行保护处理,比如设立临界区。

三 静态链接(Static link)和动态链接(Dynamic link)的区别

采用静态链接的应用程序发布后不依赖于CRTL,同时该库中的代码和数据在该应用程序调用的其他动态库中是访问不到的。
采用动态链接的应用程序必须依赖于CRTL(比如MSVCRT.DLL)。
对于动态链接CRTL的应用程序,在调用库函数时需要遵守两个原则:1)调用习惯为C(__cdecl)习惯;2)函数参数类型为值或者指针类型。

VC C运行时库(CRTL)的几个版本及选用相关推荐

  1. C语言标准及C标准库、运行时库简介

    1.C语言标准: 1978 年,Dennis Ritchie 和 Brian Kernighan 合作推出了<The C Programming Language>的第一版(著作简称为 K ...

  2. VC运行时库(/MD、/MT等)

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

  3. VC 运行时库 /MD、/MDd 和 /MT、/MTd

    这里总结下他们的区别,后面的那个'd'是代表DEBUG版本,没有'd'的就是RELEASE版本了. 首先说/MT /MT是 "multithread, static version &quo ...

  4. 下一代VC运行时库——Universal CRT

    前言 其实the Universal CRT(通用C运行时库)已经不能算是"下一代",因为它已经在前两年伴随着Visual Studio 2015和Windows10发布.但是由于 ...

  5. C运行时库和标准C++库

    先理解运行时库,就是 C run-time library,是 C 而非 C++ 语言世界的概念:取这个名字就是因为你的 C 程序运行时需要这些库中的函数.VC提供的 C run-time libra ...

  6. 动态库、静态库、运行时库、引入库之间的区别

    动态库.静态库.运行时库.引入库之间的区别 杂集.捡对口味的看看吧. 转自:http://lingualspark.blog.sohu.com/94785899.html 运行时库:Unix中一个典型 ...

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

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

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

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

  9. 一文带你弄懂Visual Studio:运行时库及MT/MTD、MD/MDD

    一文带你弄懂Visual Studio:运行时库及MT/MTD.MD/MDD 引子 什么是Runtime Library? Runtime Library和运行库 MT MTD MD MDD的关系 静 ...

最新文章

  1. python 字符串前加u r b的意义
  2. C++运行程序出现的一些问题
  3. 软工作业6--用户体验(案例分析)
  4. 华为鸿蒙热水器,美的华为跨界联合!搭载鸿蒙OS的美的产品双11上市
  5. Kruskal/Prim/Dijkstra模板
  6. 为什么IEEE 1588如此精确呢?
  7. 抖音音频提取php,php抖音背景音乐解析下载API接口
  8. Markdown中设置图片尺寸及添加图注
  9. r语言插补法_R语言之缺失值和异常值处理
  10. 快速取消PPT中所有动画效果
  11. 计算机一级考试有填空题嘛,计算机一级考试填空题
  12. ssm毕设项目农贸市场摊位管理系统c22ux(java+VUE+Mybatis+Maven+Mysql+sprnig)
  13. 「维基解密」:西游记死亡人数
  14. linux pcf8563开发文档,linux下的i2c与时钟芯片pcf8563通信
  15. 如何给 SAP UI5 SmartField 添加 Value Help 功能试读版
  16. 使用python清空文件夹
  17. pycharm发送邮件(QQ邮箱和网易163为例)
  18. Magento高级产品订阅
  19. 长尾关键词 挖掘出来的长尾关键词要怎么筛选?筛选条件有哪些
  20. JS获取客户端信息(屏幕分辨率、浏览器版本、操作系统版本)

热门文章

  1. 如何将多个视频合成一个视频,轻松把多个视频拼接合成一个视频
  2. 分割为mesh之后的地形shader编写——2
  3. 重磅!IDC、Forrester、Gartner等6大权威机构2023年数字化趋势预测集锦
  4. 【算法】回溯算法+进阶题——全排列Ⅱ、组合总和Ⅱ、解数独
  5. 该资源为版权方声明保护内容,狗狗已屏蔽器下载--解决方案
  6. PPT中的维恩图交叉图形怎么做的?Venn diagram
  7. 建筑CAD图库:CAD软件中多视图库的使用技巧
  8. 服务器cpu性能排行2019,2019最新CPU性能排行天梯图!你的排哪边?
  9. 20个免费视频素材平台推荐,高清无水印正版可商用
  10. java设计模式趣谈