C++学习笔记十一之内联函数
2017-07-11 16:43
295 查看
内联函数是c++为提高程序运行速度所做的一项改进。常规函数和内联函数之间的主要区别不在于编写方式,而在于c++编译器如何将它们组合到程序中。
【常规函数和内联函数的不同工作方式】
常规函数:
编译过程的最终产品是由一组机器语言指令组成的的可执行程序。运行程序时,操作系统将这些指令载入到计算机内存中,因此每条指令都有特定的内存地址。常规函数调用时,会使程序跳到另一个地址,函数运行完之后再跳回来。下面是具体实现:当执行到函数调用指令时,程序将在函数调用后立即存储该指令的内存地址,并将函数参数复制到堆栈,跳到标记函数起点的内存单元,执行函数代码,然后跳回到地址被保存的指令处。来回跳跃并记录跳跃位置意味着以前使用函数时,需要一定的开销。
内联函数:
对于内联函数,程序无需跳到另一个位置处执行代码,再跳回来(这里编译器将使用相应的函数代码替换函数调用,也就是副本)。因此,内联函数的运行速度比常规函数要快一点,但需要占用更多内存,毕竟有副本。如果要调用10次,就得有10个副本。
【在什么情况下使用内联函数】
内联函数一般是程序频繁调用,并且内联函数内部代码行数不能过多,一般低于10行。因为如果内联函数内部代码行数过多,那么调用那部分节省的时间就没有多大意义了。
【使用内联函数】
1、在函数声明前面加上关键字inline;
inline int love(int a,int b);
2、在函数定义前面加上关键字inline;
inline int love(int a,int b)
{
return a*b;
}
内联函数就是函数前面多了一个关键字inline,其它的没什么不同的,内联函数跟常规函数一样,都是按值传递。
【演示代码】
【常规函数和内联函数的不同工作方式】
常规函数:
编译过程的最终产品是由一组机器语言指令组成的的可执行程序。运行程序时,操作系统将这些指令载入到计算机内存中,因此每条指令都有特定的内存地址。常规函数调用时,会使程序跳到另一个地址,函数运行完之后再跳回来。下面是具体实现:当执行到函数调用指令时,程序将在函数调用后立即存储该指令的内存地址,并将函数参数复制到堆栈,跳到标记函数起点的内存单元,执行函数代码,然后跳回到地址被保存的指令处。来回跳跃并记录跳跃位置意味着以前使用函数时,需要一定的开销。
内联函数:
对于内联函数,程序无需跳到另一个位置处执行代码,再跳回来(这里编译器将使用相应的函数代码替换函数调用,也就是副本)。因此,内联函数的运行速度比常规函数要快一点,但需要占用更多内存,毕竟有副本。如果要调用10次,就得有10个副本。
【在什么情况下使用内联函数】
内联函数一般是程序频繁调用,并且内联函数内部代码行数不能过多,一般低于10行。因为如果内联函数内部代码行数过多,那么调用那部分节省的时间就没有多大意义了。
【使用内联函数】
1、在函数声明前面加上关键字inline;
inline int love(int a,int b);
2、在函数定义前面加上关键字inline;
inline int love(int a,int b)
{
return a*b;
}
内联函数就是函数前面多了一个关键字inline,其它的没什么不同的,内联函数跟常规函数一样,都是按值传递。
【演示代码】
#include <iostream> #include <stdlib.h> inline double square(double x) { return x*x; } int main() { using namespace std; double a, b; double c=13.0; a = square(5.0); b = square(4.5+7.5); cout << "a = "<<a<<", b = "<<b<<"\n"; cout << "c = "<<c; cout << ", c square = "<<square(c++)<<"\n"; cout << "Now c = "<<c<<"\n"; system("pause"); return 0; }【演示结果】
相关文章推荐
- c++学习笔记(十一):函数重载VS函数重写
- C/C++学习笔记1 - 深入了解scanf()/getchar()和gets()等函数(原创)
- C++ 函数模板和排序的函数模板——学习笔记
- c++学习笔记之函数的调用和返回
- C++学习笔记-8-函数执行的顺序
- 设计模式C++学习笔记之十一(Bridge桥梁模式)
- c++学习笔记:void*变量,在函数内必须要明确变量类型
- Inside the C++ Object Model 学习笔记 第四章 函数语意学
- Effective c++学习笔记——条款5:了解C++默默编写并调用哪些函数
- 2012/1/19 《C++ Primer Plus》第七章:函数——C++编程模块 学习笔记
- C++学习笔记1———getline()函数
- 设计模式C++学习笔记之十一(Bridge桥梁模式)
- C++中虚函数学习笔记
- Effective c++学习笔记——条款6,不想自动生成函数,要明确拒绝
- C++学习笔记(12)——多态与虚函数
- c++学习笔记--虚函数和多态的重新认识
- [C++学习笔记]自定义函数的传值方法
- C++ cctype定义的函数 - 学习笔记(7)
- 2012/1/19 《C++ Primer Plus》第七章:函数——C++编程模块 学习笔记
- C++学习序列笔记之内联函数