c运行库、c标准库、windows API的区别和联系( 三 )


我们假设两种情况,一是Windows API的实现包含部分C标准库函数的功能实现,这就决定了这部分操作系统API的实现是由调用标准库实现的,那么在发布时需要加入所用到的c标准库DLL一同发布 。
二是微软的内核(包括API)开发是使用着一个和平台严格相关的C语言的静态的链接库,这样不必提供Dll也能开发和发行 。而且必然的这个C库是在汇编的基础上实现的,也就是说这个库里面的C函数都是(至少有很大比例)披着C语法的汇编代码 。
要你是微软,你选择哪个呢?也许是两者兼而有之,也许是后者 。
一般情况下,我们说C运行库暗含的意思是哪种平台哪个开发平台的C运行库,
CRT的实现是基于Windows API的,而WindowsAPI的开发也是基于C语言的,但不是或者不一定基于CRT(或者C标准库)的 。
再深一步,虽然CRT是基于操作系统 API实现的,但并不代表所有的CRT封装了操作系统 API,如一些用户的权限控制,操作系统线程创建等都不属于C运行库,于是对于这些操作我们就不得不直接调用操作系统API或者其他库 。
总结一下,C标准库就是任何平台都可以使用的基本C语言库 。而CRT除了将C标准库加入所属范围外,还扩展了与平台相关的接口库,这些接口实现根据不同平台调用不同平台的操作系统API 。
如下图所示,采用C标准库编写的程序可以应用到windows平台,也可以应用到linux平台;而用CRT另外与平台相关的库函数编写的应用程序不能跨平台运行 。

c运行库、c标准库、windows API的区别和联系

文章插图
而不同平台的操作系统API实现,是用C标准库呢,还是汇编呢,这个可有,可没有 。毕竟那么多windows API只要发现一个调用C标准库的了,就有了 。概念理解了即可,至于微软实现的时候基于何种考虑不使用C标准库,或者使用C标准库都有自己的考虑 。那就是操作系统内部的研究范围了 。
 
【c运行库、c标准库、windows API的区别和联系】


推荐阅读