C++中内联函数详解

C++中内联函数详解

内联函数背景:函数是可以重复使用的代码块,CPU一条条执行其中的代码。CPU在执行主调函数代码如果调用了其他函数,停止主函数的执行,转而执行被调的其他函数,执行完之后再返回主程序,继续执行主程序,这就是程序的调用过程。

函数的调用是有时间和空间开销的。程序在执行一个函数之前需要做一些准备工作,将实参、局部变量、返回地址以及若干寄存器压入栈中,然后才能执行函数体的代码;执行函数体代码还要进行现场清理,即将原来压入栈中数据出栈,然后继续执行函数体后的代码。

如果被调函数体代码比较多,需要执行比较长时间,则调用机制所占时间可以忽略;如果函数体只有一两行,那么大部分时间花费在调用的机制上,这种时间开销就可以通过内敛涵数省去。

内敛函数:为了消除函数调用的时空开销,C++提供一种高效方法,即在编译时函数调用处用函数体代替,类似C语言中的宏展开。这种在函数调用处直接嵌入函数体的函数称为内联函数(inline),又称为内嵌函数或者内置函数。下面是一个例子:

#include <stdio.h>  
 
//函数定义为inline即:内联函数  
inline char* dbtest(int a) 
{  
	return (i % 2 > 0) ? "奇" : "偶";  
}   
  
int main()  
{  
	int i = 0;  
	for (i=1; i < 100; i++) 
	{  
		printf("i:%d    奇偶性:%s /n", i, dbtest(i));      
	}  
} 

关键字inline:内联函数的关键字inline,是用于实现的关键字,而不是声明的关键字。若只在声明中加关键字,函数实现中不添加关键字,则此函数不是内联函数。

inline函数的使用是有限制的
既然内联函数能够省去函数调用的时空开销,那为什么不将所有函数都用内联函数呢?**内联函数是以代码膨胀(复制)**为代价的,只是省去了函数调用的执行效率,如果函数执行函数体时间比较长,那么这样的效率收获也较小,因为每一处内联调用要复制代码,将使程序的代码量大大增加,消耗更多的内存空间。

以下两种情况不应使用内联函数:

  1. 函数体代码较长,使用内联将会导致内存消耗代价较高;
  2. 如果函数体内出现循环(出现while swicth),或者函数是本身递归函数(内部调用函数本身),那么执行函数体内部代码的时间本身时间要比函数调用开销大。

所以如果执意使用代码量较大的内联函数,就是为了节省调用函数那一点时间,从而占用更大内存空间。

参考:博客1

博客2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值