欢迎大家来到IT世界,在知识的湖畔探索吧!
简单说,库函数(library function)调用是语言或应用程序的一部分,而系统API调用是操作系统的一部分,系统调用是在操作系统内核发现一个“trap(自陷)”或中断后进行的。毫无疑问,两者都是用相同的编程语言编写的。
|
库函数调用 |
系统API调用 |
|
在所有的ANSI C编译器版本中,C函数库是相同的 |
各个操作系统的系统调用是不同的 |
|
调用的是函数库中的一个程序 |
调用的是系统内核的服务 |
|
与用户程序相联系 |
是操作系统的一个进入点 |
|
在用户地址空间执行 |
在内核地址空间执行 |
|
它的运行时间属于“用户”时间 |
它的运行时间属于“系统”时间 |
|
属于过程调用, 开销较小 |
需要切换到内核上下文环境然后切换回来,开销较大 |
|
在C函数库libc中有大约300个程序 |
在UNIX中有大约90个系统调用 |
|
典型的C函数库调用: system, fprintf,malloc |
典型的系统调用: chdir, fork, write,brk |
|
用文件指针(file pointer)来标识文件 |
用文件描述符(file descriptor)来标识文件 |
库函数调用通常比行内展开的代码(也就是inline函数)慢,因为它需要付出函数调用的开销。但系统调用比库函数调用还要慢很多,因为它需要把上下文环境切换到内核模式。在SPARC工作站上,一个库函数调用大约是半微秒。系统调用所需要的时间大约是库函数调用的70倍(35微秒)。纯粹从性能上考虑,你应该尽可能地减少系统调用的数量。但是,你必须记住,很多C函数库中的程序通过系统调用来实现功能。

欢迎大家来到IT世界,在知识的湖畔探索吧!
ref:
Perter Van Der Linden《Expert C Programming Deep C Secrets》
-End-
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/112372.html