- 来源:
- 系统调用:这些函数来自操作系统内核。它们是操作系统提供给应用程序直接访问硬件和系统资源的基础界面,例如读写文件、发送网络数据、创建进程等。
- 标准库函数:这些函数是由C语言(或其他语言)运行时环境提供的,例如printf、strcpy、malloc等。
- 实现:
- 系统调用:由操作系统内核代码实现,当一个进程执行系统调用时,它需要切换到内核模式来运行特权代码。
- 标准库函数:通常使用用户模式下的普通代码实现,并且可能在其内部使用系统调用以提供其功能。
- 性能:
- 系统调用:因为涉及用户空间到内核空间的上下文切换,所以相比于标准库函数,系统调用通常会有更高的开销。
- 标准库函数:也可能引入一定的性能开销,如果它们内部使用了系统调用,但如果只是在用户空间进行计算,那么它们的开销就会小得多。
- 可移植性:
- 系统调用:通常依赖于特定的操作系统,所以在不同操作系统之间的可移植性较差。
- 标准库函数:大多数情况下,标准库函数在各种平台上的行为都是一致的,所以具有更好的可移植性。