c++自带函数库中的函数,与windows API函数的关系是什么,是不是库函数在实际执行时也要调用windows api函数呀,即api函数才是最终能执行的函数?
c/c++都自带了函数库,比如prinf,scanf都是自带函数库中的函数,但是这些库函数在执行时,是直接转成二进制去执行呀,还是转成windows api函数呢?是不是所有库函数在实际执行时,都是转成windows api呀,这好象是个纯理论问题,但是弄不明白,不利于下一步学习,谢谢。
c/c++都自带了函数库,比如prinf,scanf都是自带函数库中的函数,但是这些库函数在执行时,是直接转成二进制去执行呀,还是转成windows api函数呢?是不是所有库函数在实际执行时,都是转成windows api呀,这好象是个纯理论问题,但是弄不明白,不利于下一步学习,谢谢。
又比如文件操作函数,最终需要访问硬件的函数,在保护模式下访问硬件是受到限制的,因此需要调用系统API来实现
同样的功能,是不是分别用库函数与api函数都可以实现呢?如果都能实现的话,哪种方法效率更高,更优化呢?
如果不是平行的关系,那就是依存的关系,即库函数可以越过api函数自已实现某些功能吗?即二者是平行的,还是上下级的,还是二种关系都有,谢谢。
{
FILE* fp = fopen(filename, "rb");
fclose(fp);
return 0;
}像这样的代码,在windows/linux下面都能正常编译。尽管在不同的os下,文件操作的接口是不一样的。
就是因为runtime library提供了对操作系统层次的封装。
我上面说过了,比如字符串、内存操作系列的函数,可以直接使用汇编来实现,而且保证效率。
类似fopen这类的函数,只能调用操作系统提供的接口,无论是在windows下或者是linux下,fopen都能保证实现相同的功能,虽然操作系统不同。由于事实上是调用了系统API,调用过程中运行库多出了各种消耗,如参数检查、函数堆栈保存、恢复等,效率会比直接调用API稍低。
目前来说,很多api还是要走WINAPI
Kernel32.dll库的函数,很显然最终api才是实现
c/c++都自带了函数库,比如prinf,scanf都是自带函数库中的函数,但是这些库函数在执行时,是直接转成二进制去执行呀,还是转成windows api函数呢? 有些函数类似字符串处理 strcpy之类,肯定是独立实现,不依赖于api,但像fopen之类最终是调用了系统api函数CreateFile,不信你可以用ida查看一下调用关系图
是不是所有库函数在实际执行时,都是转成windows api呀,这好象是个纯理论问题,但是弄不明白,不利于下一步学习,谢谢。 不知道楼主说必须弄清这个,否则不利于学习,我的建议是能用c库实现的,绝不用api,用c库可以跨平台