建设银行河北省分行网站,安吉网站建设公司,国有资产处网站建设,学网站开发 优帮云1、说明
内联函数是c为提高程序运行速度所做的一项改进。
2、常规函数运行
编译的可执行程序#xff1a;由一组机器语言指令组成。
程序执行#xff1a; 1、操作系统将这些指令载入到内存#xff0c;每条指令都有一个特定的内存地址 2、计算机逐步执行这些指令 3、如果有…1、说明
内联函数是c为提高程序运行速度所做的一项改进。
2、常规函数运行
编译的可执行程序由一组机器语言指令组成。
程序执行 1、操作系统将这些指令载入到内存每条指令都有一个特定的内存地址 2、计算机逐步执行这些指令 3、如果有条件或循环语句时将调过一些指令向前或者向后跳转特定地址 4、常规函数调用也是调到调用函数的地址并在函数结束时返回。
常规调用函数执行 1、执行函数调用指令 2、存储该指令的内存地址将函数参数复制到堆栈 3、跳到标记函数起点的内存单元 4、执行函数代码将返回值放到寄存器 5、跳回保存的指令处。
问题 来回跳跃并记录跳跃位置意味着使用函数时需要一定的开销
3、内联函数
内联函数是编译器直接将函数内容替换调用位置避免常规函数来回跳跃代开的开销比常规函数稍快
缺点 会占用更多的内存。举例 如果一个程序在10个不同的地方调用同一个内联函数则该程序将会包含该函数代码的10个副本。
使用 1 在函数声明前加关键字inline 2在函数定义前加关键字inline
demo:
#include iostreaminline 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 squared square(c) \n;cout Now c c \n;return 0;
} 通过demo可以看出内联函数和常规函数一样也是按值传递参数的如果参数为表达式则将传入表达式计算的值。
4、内联与宏
1、inline工具是C新增的特性内联原始实现也是宏 2、C语言使用预处理器#define来提供宏
举例实现一个计算平方的宏
#define SQUARE(X) X*X
a SQUARE(5.0); // is replaced by a 5.0*5.0
b SQUARE(4.57.5); // is replaced by b 4.57.5*4.57.5
c SQUARE(c); // is replaced by c c*c宏并不是通过传递参数实现的而是通过文本替换