环球观天下!crt是什么意思?Microsoft开发的C/C++标准库实现
CRT原先是指Microsoft开发的C Runtime Library(C语言运行时库),用于操作系统的开发及运行。后来在此基础上开发了C++ Runtime Library,所以现在CRT是指Microsoft开发的C/C++ Runtime Library。在VC的CRT/SRC目录下,可以看到CRT的源码,不仅有C的,也有C++的。
CRT原先的目的就是支持操作系统的运行。因为Windows操作系统除汇编部分外,都是用C/C++编写的,所以内核及许多关键服务都在CRT上运行(它们都采用dll技术动态链接)。此外,用VC编写的C/C++程序也用到它们(可以动态链接,也可以静态链接,前者运行时需要系统中已安装CRT的dll,后者不需要)。可以说,CRT就是Microsoft编写Windows时使用的低层类库。然后,它又被当作C++标准库的一个实现包含在了VC系列中;我们在VC中使用的C++标准库,其实就是CRT的一个真子集(少了C++标准所不包含的代码,特别是大量的低层C代码)。
至于CRT与WINDOWS API的关系,与许多人理解的相反,WINDOWS API作为Windows的一部份,是在CRT的基础上开发的。你可以将Windows(及其API)看作一个项目,而这个项目使用的语言是汇编/C/C++,使用的类库就是CRT。所以,离开CRT,Windows API也无法使用的。
(资料图片)
C++标准,是C++的通用语言规范,指导所有C++使用者。而CRT的其中一部分可以看作是Microsoft开发的一个C++标准库实现(其实也确实如此,Microsoft在开发CRT时,参考了正在标准化过程中的C++语言规范)。它与C++标准有一定的差距,部分原因是,在C++没有完成标准化之前,CRT已经开发并投入使用了。为了向下兼容以前的Windows代码,早期的CRT与C++标准总有一定的差距。但是CRT确实在不断的改进中。VC6带的CRT与C++标准还有比较大的差距,而VC8的几乎完全符合C++标准了。
综上,CRT(Microsoft"s C/C++ Runtime Library)的一个真子集(主要是C++ Runtime Library)是一个符合(或至少是企图符合)C++标准的C++库。而Windows API(以及Windows的其他许多部分)都是在CRT的基础上开发的。
-------------------------------------------------------------------------------------------------------------------------------------------------------
除了以上介绍的,在使用CRT的过程中,你还需要了解的是:
1、CRT的一些组成部分也调用了Windows API。这可能就是有人认为CRT是建立的Windows API基础上的原因。但是实际上,这一部分剥离CRT没有任何的问题。只不过Microsoft将在Windows平台上可以使用的C/C++低层库都加入到CRT中。因此,CRT中很大一部分是操作系统平台无关的(原始的CRT),是开发Windows本身及其上一切的基础。它们也可以作为一个C/C++库在其他操作系统平台上使用。还有一部分,则是和Windows紧密绑定的,调用Windows API来实现的,可以看作扩展的CRT。之所以将这两部分放在一起,是因为它们都是开发Windows操作系统所需要的,也因为它们也都是Windows平台上的C/C++程序员所需要的。这种复杂关系是Microsoft的人为因素造成的,不能因此认为CRT是建立在Windows或Windows API基础上的。
2、CRT的大部分内容是跨硬件平台的,但是也有一些部分,是直接用汇编写成、基于硬件平台、并根据特定硬件平台做的优化(而不是将生成机器码的责任完全交给编译器)。如早期对Indel的x32做了优化,现在由加入对AMD64的优化,这部分则是不跨硬件平台的。
-------------------------------------------------------------------------------------------------------------------------------------------------------
在编写操作系统时,你需要一个合适的低层库,以便完成一些基本的、多次重复的工作。于是,就有了CRT。在最低层的时候,根本连dll这个概念都没有的,所以CRT的源代码只能做成lib,被静态链接。然后,随着Windows越做越复杂,Microsoft提出了API的概念,它提供Windows开发者一组接口,可以直接操作Windows,这就是Windows API了。当然,Windows API也是在CRT之上编写的。
接着,Microsoft想给予C/C++程序员以足够的支持,除了原始CRT之外,还要增加在Windows平台上编程所特有的东西,如thread等等。这些东西都是和平台相关的,只能建立在Windows API上。而这些新增内容,也被放进了CRT中。此时,CRT不仅仅包含最低层平台无关的代码,还包括平台相关的部分。如你调用CRT的_beginthread,其实内部调用了Windows API的CreateThread。加入这些东西后,CRT仍然被用作编写操作系统;但是显然,那些调用了Windows API的部分已经失去移值性了。
然后,CRT被封装成产品,随编译器一起发布。此时CRT产品的LIB和DLL都是Windows格式的,你不能在Windows以外的平台上使用EXE或DLL吧,这就是CRT和CRT产品的区别。Windows API的产品,或是Windows的其他许多组成部分也是一些LIB/DLL文件,这些都是表面的东西,是与Windows绑定在一起的。但是,如果你认为是先有Windows或Windows API,才有CRT的,那你就本末倒置了。除非你对CRT的定义就是那些LIB/DLL产品,而不包括用来产生它们的代码。
就象C++编译器用来编译用C++写的编译器自身一样,Windows(及其上的编译器)用来作为平台开发和编译CRT,并也用CRT来写Windows自身(当然第一个CRT和第一个用来编译Windows的编译器不是在Windows上开发的)。就象“我”也可以先写一个类库,然后在它基础上写一个操作系统,在这个操作系统上进一步扩充这个类库,然后将它配合编译器发布出去,发展一些我的操作系统的支持者,顺便再赚点收入。或者以另一种模式发布另一个库(只是我在原来那个库上开发的一个产品,由于我独立地发布这个新库,许多人会不知道这个新库与旧库的关系。这很好,因为编程本身就是尽量隐藏细节,尽量做到对使用者透明的),吸引不同风格的开发者。这样我的付出得到了最大的回报——由于我没有发布操作系统的源代码,所以许多用户认为我不仅做了系统,还做了编译器,还开发了一个类库。做了那么多事,回报是应该的。其实他们不知道,类库是编写操作系统所必须的,编译器也是必须的,这些必须的东西却可以在操作系统之外获得更多的回报,真是太完美了!这是什么?这就是商业精神!当然这些误解对我是有好处的,我就不必到处宣扬真相了。反正我把类库的源码都发布了,也没有骗过人吧。我不过是在那个原始类库中加进了一些与我的操作系统相关的东西,以方便在我的系统上编写程序的人们,这是我的好心吧;至于有人可能产生进一步的误解,就不是我需要考虑的了……
所以还是看看CRT的源码吧——看看那些针对硬件平台的汇编;看看VC的标准C++库和CRT关系;再看看其他操作系统的源代码,想想CRT中的哪些部分可以支持用来写操作系统,而如果我自己写系统,又需要哪些东西;甚至你可以看看DOS的源代码,想想和CRT的相似性,以及历史渊源。可惜不能看到Windows的源代码,否则一切就清楚了。
最后再说一句,C++当然不是Microsoft的专利。但是Microsoft选择了C++,并取得了成功,这是肯定的了:象CRT,象VC,象Windows,象Office,象SQLServer......这一方面说明了C++的优势,一方面也是Microsoft自身的因素在起作用。然后,它当然要紧抓C++的大旗,大力宣扬它自己的C++,并排斥其他的C++。这就是帝国的“风范”了。所以对Microsoft,总是即恨且爱,总希望哪天它会良心发现——当然这只是幻想罢了。不过,肯定该肯定的,否定该否定的,总是应该的。但就产品而言,Microsoft不是最好的,但大多都是最成功的,在看到它的不足的同时,也要看到它的优点。存在的即使不是合理的,也一定有它的合理性。所以,不能简单用一两句话评价Microsoft及它的成功。惟有一点是可以肯定的,它决定选择C++,真是太英明了!!
一般说来, 任何用C编写的操作系统, 都在内核中实现了一个crt的子集, 这个子集实现了一些内核需要的操作, 并且不依赖任何别的库; 之后, 会有另一个crt的实现, 在这个操作系统上, 部分功能实现不使用操作提供提供的API, 例如是纯粹内存操作的功能 strncmp 等, 另外一部分, 则使用操作系统提供的API, 当然它想不使用也不行, 如 printf, 要是不使用Windows API, 它怎么把字符串输出到控制台窗口啊?~ 哈哈。在linux下, 这个操作系统用到的crt的子集称为klibc, 在windows下, 称为ntcrt;而基于操作系统的完整实现在linux下为glibc, 在windows下称为 msvcrt。
【参考资料 感谢作者】
1、CRT与Windows
标签: 操作系统
相关推荐:
最新新闻:
- 马赫带效应是什么?马赫带效应的定义
- hp服务器电话官方网站怎么查询?查询步骤 环球热闻
- 计算氢原子基态能级 积分可分类动能和势能怎么计算?
- 如何在oracle中导入dmp数据库文件?
- 如何区分光伏系统中的“李逵”与“李鬼”?
- 环球百事通!自动驾驶之路面缺陷检测 路面缺陷检测算法演示
- 【全球时快讯】shutdown和close的区别 Sockfd如何关闭socket的描述符?
- night24_Excel 2010条件格式梦Night 如何在列表中分隔日期?|环球微资讯
- 逐鹿工具显示服务器错误连接不上怎么解决?解决方法如下
- 网络广告类型有哪些?网络营销广告的类型(CPC、CPM、CPA、CPS, CTR)|焦点快播
- 挪威国宝级女歌手:一首炽热的英文情歌-当前看点
- 《英雄联盟比赛服》怎么下载?英雄联盟比赛服-观点
- 当前信息:新手程序员的代码写不好怎么办?38条PHP优化代码
- 环球即时:微信如何开通直播?微信开通直播的方法
- 【雅思阅读】最好的雅思课程-阅读部分全集
- 如何下载顺义区卫星地图高清版大图?下载步骤-全球信息
- 环球观天下!crt是什么意思?Microsoft开发的C/C++标准库实现
- macOS如何给文件加密?macOS文件加密技巧
- 数学小知识汇总 矩阵范数、梯度和梯度场的区别-全球资讯
- 粘粘世界worldofgoo攻略 《粘粘世界 world of goo》怎么下载?:全球动态
- Cygames即将发布《小小诺娅:乐园继承者》的新公告
- 多人弹幕射击游戏《黑白之地》Steam页面上线 支持简体中文_当前关注
- 2022年PlayStation游戏七大趋势:交界地的喘息
- 每日速看!松下电饭煲将告别日本制造 移交给中国工厂生产
- 天天观点:暴雪子公司Proletariat收购6个月后试图成立工会
- 《星空》玩家将有前往地球的机会 那地球会是什么样?:天天速看料
- 阿凡达2全球票房破10亿美元 走势优于预期
- 打不开192.168.1.1怎么办?打不开192.168.1.1解决方法
- WIN10如何修复操作系统?超详细的五种解决方法
- iphone已被停用怎么办 教你两招轻松解除停用状态
- 图片水印如何去除?推荐3种去水印的好方法
- 戴尔笔记本能换显卡吗?笔记本电脑显卡和台式机显卡有什么区别?
- 如何修改注册表路径?通过注册表修改软件安装路径
- 电脑怎么终止自动关机命令?电脑解除自动关机命令方法
- 休眠快捷键如何设置?键盘休眠状态设置技巧
- 电脑突然蓝屏怎么办?处理电脑蓝屏的正确方法
- 条形码打印机怎么换碳带?更换打印机碳带详细步骤
- 风云防火墙使用教程 防火墙的使用技巧
- 复印机卡纸了怎么弄出来?解读复印机为什么会卡纸?
- 打印机墨盒怎么加碳粉?打印机加碳粉教程
- windowsxp怎样重装系统?重装系统教程
- 电信托管服务器的好处 服务器托管的安全性
- 笔记本键盘保护膜有必要吗?键盘膜优缺点有哪些?
- 车载mp3播放器怎么使用?车载mp3播放器使用方法
- h3cs5500交换机配置教程 解析H3C华三交换机的配置命令
- 金山毒霸2009卸载不了怎么办?完美卸载金山毒霸的方法
- sc光纤跳线连接方法 sc光纤跳线注意事项
- 尼尔德鲁克曼:《最后生还者》剧集会是最好的游改剧集
- 当前速看:《艾尔登法环》荣获106项年度游戏奖 2022年度游戏
- 42岁广末凉子时隔22年再出写真 招牌笑容依旧少女感
- 暴雪携手林肯公园成员 翻唱摇滚版《巫妖王之怒》插曲
- 《精灵鼠传说2》首张截图 换用虚幻5引擎
- “北方第二城”易主?这回合青岛上分
- 世界观速讯丨公司裁员的前兆
- 18英寸“大家伙”要来了 ROG玩家国度新品发布会定档1月4日
- PC玩家狂喜:PS3模拟器已可运行所有PS3游戏
- 世界快资讯:如何查看电脑连接的wifi密码 一共三种方法
- iPhone 15或将告别直角设计 新设计手感更好:全球最新
- RTX 4070Ti性能曝光 比RX 3090Ti还要强-环球观焦点
- 每日观察!Capcom开展网络调查 填完问卷可获限定壁纸
- 能源危机下的众生相:德国重回“燃煤”时代,中东豪掷千金奔向清洁能源_每日聚焦
- 天天快报!性价比碾压小米13?Redmi K60系列发布会汇总
- 环球热议:学AMD大涨价!Intel新一代平民主板来了:这涨幅不小
- 【世界时快讯】AMD最便宜的Zen4处理器要上新了:1月10日上市
- 消息称任天堂的确考虑过Switch Pro不过已改变策略
- 菲尼克斯NT参战《机动战士高达:激战任务2》_世界要闻
- 全球微资讯!海外版拼多多成美国下载量最高App
- 已做工商变更 微念与李子柒达成和解
- 测试画面放出 淘宝将在春节期间推出首个元宇宙直播间
- 超越PS4!Switch全球销量1.18亿台:史上销量第四主机-重点聚焦
- 宏碁发布27英寸暗影骑士电竞显示器:100Hz刷新率 仅679元
- 口碑稀烂破纪录?网飞《猎魔人:血源》好评率仅8%
- Epic喜加一:《Severed Steel》免费领取_全球播报
- 全球即时:另一家动视暴雪工作室Proletariat正在组建工会
- RTX 4080移动版跑分来了!42%碾压移动版3080-世界观天下