系统调用与库函数的联系与差异

虽然从用户的角度来看,系统调用与库函数的行为没有什么不同;但从实现者的角度来看,系统调用与库函数是完全不同的两回事。这里介绍一点两者之间的差异。

系统调用,可以理解为直接进入内核的入口点。UNIX为每一个系统调用都在标准C库中设置了一个具有相同名字的函数,这些函数用系统要求的技术调用相应的内核服务。从应用的角度来看,系统调用与C函数的行为看起来完全一致。

而通用库函数并非内核的入口点,它们可能会调用大于等于0个的系统调用。比如printf会调用write系统调用来输出字符串;而strcpy与atoi不使用任何的系统调用。通常来说,库函数是可以替换的,而系统调用一般无法替换。下面这个示意图可以解释C库函数与系统调用之间的差异:

举例来说,有很多方法进行存储空间的分配与回收,对不同的方法应用不同的策略,不存在绝对最优的方法。malloc函数使用sbrk系统调用进行空间的分配,这个系统调用按照指定的字节数进行增加/减少进程地址空间。如果不喜欢malloc的分配方式,大可以自己定义一个空间分配的函数。实际上有很多软件都应用sbrk系统调用实现自己的存储空间分配算法。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值