博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++内联函数
阅读量:4963 次
发布时间:2019-06-12

本文共 526 字,大约阅读时间需要 1 分钟。

内联函数的使用可以避免函数调用的开销


int max ( int a, int b ){    return a>b ? a: b;}

对于以上函数,函数体只有一行,执行起来比求原来的表达还要慢。

在大多数机器上,一次函数调用包含一系列工作:调用前要先保存寄存器,并在返回是恢复;如果需要,可能还要拷贝实参;程序转向一个新的位置继续执行。这些操作由编译器自己完成,将它称为函数调用的基本开销。这就是说,即使函数体为空,在调用它的时候仍然耗费了一定的CPU.
为了避免这种低效率的事情发生,当发现函数体较短时,将函数声明为inline,此时编译器会做特定优化:

不使用函数调用机制,而是直接把代码逻辑直接“内联”到调用点上。

因为省去了函数的调用机制,代码的运行效率提高。

注:什么情况“长”,什么情况“短”,是由编译器自己衡量的。即使将函数声明为inline,编译器也不一定会按inline编译。如果它发现代码实际上很“长”,它还是会按函数第哦啊用的方式来编译。

即内联只是向编译器发出一个请求,编译器可以选择忽略这个请求。(编译器:我说了算)

转载于:https://www.cnblogs.com/elong1995/p/10846836.html

你可能感兴趣的文章
委托的调用
查看>>
c#中从string数组转换到int数组
查看>>
数据模型(LP32 ILP32 LP64 LLP64 ILP64 )
查看>>
java小技巧
查看>>
POJ 3204 Ikki's Story I - Road Reconstruction
查看>>
【BZOJ】2959: 长跑(lct+缩点)(暂时弃坑)
查看>>
iOS 加载图片选择imageNamed 方法还是 imageWithContentsOfFile?
查看>>
toad for oracle中文显示乱码
查看>>
SQL中Group By的使用
查看>>
错误org/aopalliance/intercept/MethodInterceptor解决方法
查看>>
Pylint在项目中的使用
查看>>
使用nginx做反向代理和负载均衡效果图
查看>>
access remote libvirtd
查看>>
(4) Orchard 开发之 Page 的信息存在哪?
查看>>
ASP.NET中 GridView(网格视图)的使用前台绑定
查看>>
深入了解Oracle ASM(二):ASM File number 1 文件目录
查看>>
Boosting(提升方法)之AdaBoost
查看>>
Binding object to winForm controller through VS2010 Designer(通过VS2010设计器将对象绑定到winForm控件上)...
查看>>
Spring Boot实战笔记(二)-- Spring常用配置(Scope、Spring EL和资源调用)
查看>>
SwaggerUI+SpringMVC——构建RestFul API的可视化界面
查看>>