当前位置:  技术问答>linux和unix

syscall的wrapper为什么必须是inline的?

    来源: 互联网  发布时间:2016-07-17

    本文导语:  就像这些: static inline _syscall0(int,idle)                                                 static inline _syscall0(int,fork)                                                 sta...

就像这些:
static inline _syscall0(int,idle)                                                

static inline _syscall0(int,fork)                                                

static inline _syscall2(int,clone,unsigned long,flags,char *,esp)                

static inline _syscall0(int,pause)                                               

static inline _syscall0(int,setup)                                               

static inline _syscall0(int,sync)        

。。。
如果不是inline的,会有什么问题呢?
我的想法大概是这样会避免函数调用时寄存器的保存和恢复
但具体为什么不是很确定
大家帮我解释一下,谢谢

|
可能对吧。
从用户态转到内核态,寄存器的保存几乎可以说是一个必然动作,所以这个过程当中,原来的寄存器的值已经保存在内核态的栈中,不过这个动作的确不是由C编译的代码来做的,通常会采用汇编来写。所以system call的handle的确没有必要再处理一次。

inline另一个作用是提高效率,可能也是考虑的原因。

|
inline函数的引入使得编程者只关心函数的功能和使用方法,而不必关心函数功能的具体实现;函数的引入可以减少程序的目标代码,实现程序代码和数据的共享。但是,函数调用也会带来降低效率的问题,因为调用函数实际上将程序执行顺序转移到函数所存放在内存中某个地址,将函数的程序内容执行完后,再返回到转去执行该函数前的地方。这种转移操作要求在转去前要保护现场并记忆执行的地址,转回后先要恢复现场,并按原来保存地址继续执行。因此,函数调用要有一定的时间和空间方面的开销,于是将影响其效率。特别是对于一些函数体代码不是很大,但又频繁地被调用的函数来讲,解决其效率问题更为重要。引入内联函数实际上就是为了解决这一问题。 

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • ■2.6内核的两个宏常量“nr_syscalls”和“NR_syscalls”?
  • 答疑解惑之 syscall()
  • 如何知道syscall系统调用的,入参数的类型和数量
  • 在syscall_table_32.S中添加系统调用表项时,每一项前面的
  • No rule to make target `missing-syscalls'
  • SYSCALL_DEFINE6函数的数据参数void __user *, buff,这个buff是从哪里传下来的


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3