网站运营阶段,wordpress首页没有显示文章图片,衡水建设投资集团网站,雨花区网站建设C入门 1 内联函数1.1 定义1.2 查看方式1.3 注意 Thanks♪(#xff65;ω#xff65;)#xff89;谢谢阅读下一篇文章见#xff01;#xff01;#xff01; 1 内联函数
1.1 定义 程序在执行一个函数前需要做准备工作#xff1a;要将实参、局部变量、返回地址以及若干寄存… C入门 1 内联函数1.1 定义1.2 查看方式1.3 注意 Thanks♪(ω)谢谢阅读下一篇文章见 1 内联函数
1.1 定义 程序在执行一个函数前需要做准备工作要将实参、局部变量、返回地址以及若干寄存器都压入栈中然后才能执行函数体中的代码函数体中的代码执行完毕后还要清理将之前压入栈中的数据都出栈然后接着执行函数调用位置以后的代码。
在函数较大时执行函数需要较多时间那么函数调用的时间可以忽略不计 但是当函数较小时比如求和交换等简单函数函数调用的时间就不可以忽略了。再加上如果频繁调用那么就会有大部分时间花在函数调用上。
而内联函数是直接把函数加入其中免去调用的时间开销。
以inline修饰的函数叫做内联函数编译时C编译器会在调用内联函数的地方展开没有函数调 用建立栈帧的开销内联函数提升程序运行的效率。
类似于C语言中的宏展开宏的缺陷较多。
1.2 查看方式
查看方式
在release模式下查看编译器生成的汇编代码中是否存在call Add在debug模式下需要对编译器进行设置否则不会展开(因为debug模式下编译器默认不会对代码进行优化以下给出 vs2022 的设置方式) 这下就可以看出内敛函数的优化了如下直接把函数插入 其中。
1.3 注意
inline是一种以空间换时间的做法如果编译器将函数当成内联函数处理在编译阶段会用函数体替换函数调用缺陷可能会使目标文件变大优势少了调用开销提高程序运行效率。inline对于编译器而言只是一个建议不同编译器关于inline实现机制可能不同一般建议 将函数规模较小(即函数不是很长具体没有准确的说法取决于编译器内部实现)、不是递归、且频繁调用的函数采用inline修饰否则编译器会忽略inline特性。 《Cprime》第五版关于inline的建议 内联说明只是向编译器发出请求编译器可以选择忽略这个请求。inline不建议声明和定义分离分离会导致链接错误。因为inline被展开就没有函数地址了链接就会找不到。
不可忽略的一点是 代码膨胀我们本身是1万行的主函数如果有个 1万 行的函数调用了100次。 使用内联函数 结果是展开100次我们的代码编译后就会变成100万行 不使用内联函数函数会在栈区开辟空间100次调用同一位置的函数我们的代码是 2 万行 这样差距还是很大的。
Thanks♪(ω)谢谢阅读
下一篇文章见