内联函数
整理自 内联函数百度百科
内联函数是指用inline修饰的函数(并不是所有用inline修饰的函数都是内联函数,是不是内联函数,取决于编译器),从代码上看具有函数一样的结构,但是编译后跟函数的性质不一样。
内联函数的作用
相当于宏定义,对于体积小,频繁被调用的函数相当受益。能有效提高程序运行效率。
内联函数与函数比较:
【内联函数的使用跟函数一样,但是效率却比函数高,内联函数的函数体过大,一般的编译器会放弃内联方式,而采用普通的方式调用函数。这样,内联函数就和普通函数执行效率一样了】
A. 函数的调用须将程序执行的顺序转移到函数所存放的内存中的某个地址,将函数的任务执行完毕之后再返回到转来执行该函数前的地方。这个过程需要以下任务:
1.转去执行前,保存现场,并记忆执行的地址
2.转回后,恢复现场,并按原来保存的地址继续执行。
因此,函数调用要有一定的时间和空间方面的开销,于是影响效率。
B.内联函数在编译时就将代码段替换,没有额外的空间和时间方面的开销,所以效率更高,但是如果大量使用将需要更大的内存空间。
注意:
1.递归函数不能定义为内联函数
2.内联函数一般适合于不存在while和switch等复杂的结构且只有1~5条语句的小函数上,否则编译系统将该函数视为普通函数。
3.内联函数只能先定义后使用,否则编译系统也会把它认为是普通函数。
4.对内联函数不能进行异常的接口声明。
内联函数与宏定义比较
【内联函数能有效规避宏定义易产生的二义性】
1.内联函数在编译时替换代码段,宏定义在预处理时替换
2.内联函数能够访问对象的成员变量,宏定义不可以
3.宏定义易产生二义性,内联函数不会
比如 乘法
```
#define multiple(a,b) a*b
inline double multiple(double a, double b){
return a * b;
}
```
Tip:在oc代码中 也经常看到内联函数 如:
用static 修饰的函数 为静态函数,表示只能在声明它的文件当中可见,不能被其它文件使用。可防止与其他文件出现重命名冲突问题。详见static百度百科
网友评论