关于C++中inline函数
2013-11-08 17:27
211 查看
inline函数
下面的函数,函数体中只有一行语句:
double Average(double total, int number)
{
return total/number;
}
定义这么简单的函数有必要吗?实际上,它还是有一些优点的:第一,它使程序更可读;第二,它使这段代码可以重复使用。但是,它也有缺点:当它被频繁地调用的时 候, 由于调用函数的开销,会对应用程序的性能有损失。例如,Average在一个循环语句中重复调用几千次,会降低程序的执行效率。
那么,有办法避免函数调用的开销吗?对于上面的函数,我么可以把它定义为内联函数的形式:
inline double Average(double total, int number)
{
return total/number;
}
函数的引入可以减少程序的目标代码,实现程序代码的共享。但是,函数调用也需要一些时间和空间方面的开销,因为调用函数实际上将程序执行流程转移到被调函数中,被调函数的程序代码执行完后,再返回到调用的地方。这种调用操作要求调用前保护现场并记忆执行的地址,返回后恢复现场,并按原来保存的地址继续执行。对于较长的函数这种开销可以忽略不计,但是对于一些函数体代码很短,但又被频繁地调用的函数,就不能忽视这种开销。引入内联函数正是为了解决这个问题,提高程序的运行效率。
在程序编译时,编译器将程序中出现的内联函数的调用表达式用内联函数的函数体来进行替换。由于在编译时将函数体中的代码替代到程序中,因此会增加目标程序代码量,进而增加空间开销,而在时间开销上不象函数调用时那么大,s它是以目标代码的增加为代价来换取时间的节省。
下面的函数,函数体中只有一行语句:
double Average(double total, int number)
{
return total/number;
}
定义这么简单的函数有必要吗?实际上,它还是有一些优点的:第一,它使程序更可读;第二,它使这段代码可以重复使用。但是,它也有缺点:当它被频繁地调用的时 候, 由于调用函数的开销,会对应用程序的性能有损失。例如,Average在一个循环语句中重复调用几千次,会降低程序的执行效率。
那么,有办法避免函数调用的开销吗?对于上面的函数,我么可以把它定义为内联函数的形式:
inline double Average(double total, int number)
{
return total/number;
}
函数的引入可以减少程序的目标代码,实现程序代码的共享。但是,函数调用也需要一些时间和空间方面的开销,因为调用函数实际上将程序执行流程转移到被调函数中,被调函数的程序代码执行完后,再返回到调用的地方。这种调用操作要求调用前保护现场并记忆执行的地址,返回后恢复现场,并按原来保存的地址继续执行。对于较长的函数这种开销可以忽略不计,但是对于一些函数体代码很短,但又被频繁地调用的函数,就不能忽视这种开销。引入内联函数正是为了解决这个问题,提高程序的运行效率。
在程序编译时,编译器将程序中出现的内联函数的调用表达式用内联函数的函数体来进行替换。由于在编译时将函数体中的代码替代到程序中,因此会增加目标程序代码量,进而增加空间开销,而在时间开销上不象函数调用时那么大,s它是以目标代码的增加为代价来换取时间的节省。
相关文章推荐
- C++中关于strtok()函数的用法
- 关于函数内联及相关关键字inline,__inline,__forceinline的详细说明
- 关于C++中定义比较函数的三种方法小结
- 关于C++中类的成员函数实现的位置问题
- C++初学者(关于函数指针的应用)
- 【C++总结】关于函数返回对象析构的问题
- 关于inline函数
- C/C++中关于时间的函数 time()
- C++里关于函数fun的小问题
- C/C++中关于时间的函数 clock()
- 关于C++中sort函数所使用的cmp函数中的&的疑惑
- C++primer——inline 函数避免函数调用的开销
- 关于C++函数主题
- 关于 C/C++ 的 main 函数
- 关于c++中函数原型声明的小讨论
- 关于c++使用sql语句调用 mysql数据库中带参函数的方法
- 堆排序——C++关于堆排序的库函数排序
- 关于C++中函数指针的使用(包含对typedef用法的讨论)
- C++ 有关于函数对象以及谓词部分练习以及知识点的总结
- 关于c++和C的getXXX系列函数