LKD中关于Inline函数的描述

下面的文字不长,并且好理解,花小部分时间看完,还是挺值得的。  

 

C99和GNU C均支持内联函数,inline(直译:字里行间展开)这个名称就可以反应出他的工作方式。函数会在调用他的地方展开,这样子做可以消除函数调用带来的开销(寄存器的存储和恢复),而且,编译器会把调用函数的代码和函数本身放在一起优化,所以有进一步优化的可能。不过,这样子做是有代价的(天下没有免费的午餐),这样子做代码会变长,这就意味着占用更多的指令空间和指令缓存。内核开发者通常把那些对时间要求高,而本身长度又比较短的函数定义为内联函数。如果一个函数比较大,又会被反复调用,并且没有特别的时间限制,那么我们并不赞成把它定义为内联函数。

  定义一个内联函数的时候,需要使用static关键字,并且用inline限定它,比如:

  static inline void Test(unsigned int para)

内联函数在使用前必须就定义好,否则编译器就无法将其展开,在实践中一般将内联函数定义在头文件中。由于使用了static关键字,所以编译时不会为内联函数创建函数体。如果这个内联函数仅仅只在某个源文件中使用,那么可以把它定义在该文件的起始地方。

 

  在内核中,为了安全性和易读性,优先使用内联函数而不是宏。

 

 

以上来源于Rebort Love的LKD一书。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值