内联函数inline
结论在文章末尾处!
在C++中,为了解决一些频繁调用的小函数大量消耗栈空间(栈内存)的问题,特别的引入了inline修饰符,表示为内联函数。
内联函数的处理方式是在函数的调用点直接代码展开。在计算机系统下,假如频繁的调用就会造成较大的时间开销。内联函数的引入减少了函数调用过程中开栈和清栈的开销。
下面来看不使用内联函数的时候:
#include<iostream>
using namespace std;int Add_int(int a, int b)
{return a + b;
}int main()
{int a = 10, b = 20;int c = Add_int(a,b);cout << "c" << "=" << c << endl;system("pause");return 0;
}
打开汇编:
可以看到的是,先将b入栈,然后将a入栈,再通过call调用Add_int函数!
下面看一下使用内联函数之后:
#include<iostream>
using namespace std;inline int Add_int(int a, int b) //在函数前面加上inline
{return a + b;
}int main()
{int a = 10, b = 20;int c = Add_int(a,b);cout << "c" << "=" << c << endl;system("pause");return 0;
}
打开她的汇编:
我们打开汇编之后发现还是和之前没加内联函数inline之前的汇编是一样的,这是怎么回事呢,原来我们加没加inline都是处在debug版本下,inline在debug版本下是不生效的,只有在release 版本下inline才生效,那么我们切换到release版本下再来打开汇编:
我们发现就没有了入栈那些个操作,直接在调用函数那块就将函数展开了!
那么内联函数有什么需要注意的呢?
1.nline函数一般写在头文件中。(当多文件使用到同一个inline函数,就得写在头文件中)
2.inline函数只在Release版本生效。在Debug版本是不生效。
3.inline函数只是给编译器的一个建议。具体是否处理成inline函数是编译器决定的。
第三点具体是怎样的呢,如果说你的内联函数体内有循环、判断语句这种的话,就算是你加了内联函数inline,编译器也不会按照内联函数进行处理,还有就是当内联函数函数体过大时也不会按照内联函数进行处理,这个过大没个具体值,可能是多于十行或是20行,对于某些编译器来说,当你给有判断语句与循环语句或函数体大的函数加inline之后,会进行报错(看编译器)!
还有以一个需要注意的点就是内联函数与宏的区别:
inline函数的处理时机是在编译阶段处理的,有安全检查和类型检查。而宏的处理是在预编译阶段处理的,没有任何检查机制,只是简单的文本替换。inline函数是一种更安全的宏。
内联函数inline相关推荐
- C++中的内联函数inline
1.Cpp中的内联函数 内联函数是通常与类一起使用.如果一个函数是内联的,那么在编译时,编译器会把该函数的代码副本放置在每个调用该函数的地方.对内联函数进行任何修改,都需要重新编译函数的所有客户端,因 ...
- C++中的内联函数inline总结
C++中的内联函数inline总结 标签: c++编译器vector编程汇编windows 2011-08-26 21:46 13982人阅读 评论(8) 收藏 举报 分类: c/c++进行时(28) ...
- C++内联函数(inline function)
c++从c中继承的一个重要特征就是效率.假如c++的效率明显低于c的效率,那么就会有很大的一批程序员不去使用c++了. 在c中我们经常把一些短并且执行频繁的计算写成宏,而不是函数,这样做的理由是为了执 ...
- ios内联函数 inline
ios内联函数 inline 缘由 由于在学习使用UIScrollVew开发的过程中,碰到下面这个属性(设置内边距): @property(nonatomic) UIEdgeInsets scroll ...
- [C++] 内联函数inline 以及 auto关键字 -- C++入门(4)
本篇文章主要包括内联函数和auto关键字.其中,内敛函数包括概念,特性等:auto关键字的使用规则,使用场景等. 目录 1.内敛函数 1.1问题引入: 1.2内联函数的概念 1.3内敛函数的特性 2. ...
- 内联函数(Inline Function )
目录 什么是内联函数(Inline Function) 如何将函数编写为内联函数(how to make function inline) 例: 为什么使用内联函数(Why to use inline ...
- c语言什么是内联函数,C语言中内联函数inline的使用方法
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 来源一:比特网 来源二:东方锐智 在C++中,为了解决一些频繁调用的小涵数大量消耗栈空间或者是叫栈内存的问题,特别的引入了inline修饰符,表示为内联涵 ...
- C++ | 内联函数 inline
什么是内联函数? 在函数说明之前冠以关键字"inline",该函数就被声明为内联函数,又称为内置函数 内联函数的作用? 消除函数调用时的系统开销,提高运行速度. 应用注意事项 1. ...
- ios 内联函数 inline ---分解LFLiveKit
/*内联函数:用 inline 关键字修饰的函数.内联函数不是在函数调用时发生控制转移,类似于<宏>在编译时将函数体替换每一个调用的代码位置.相较于普通函数:1.普通函数(没有inline ...
最新文章
- python rjust() 方法 与 ljust()方法 的使用
- javaScript获取url中的参数
- c语言入门经典课后作业,C语言入门经典习题答案.doc
- 【git学习】git项目管理工具
- 传统人工势场法的MATLAB实现
- 【163】VS2022调试通过海康明眸门禁报警事件中的报警布防C++示例代码
- Windows下 Java9安装教程
- 武汉理工大学计算机辅助项目管理简答题,武汉理工大学软件项目管理实验报告...
- 第十四周助教工作总结——NWNU李泓毅
- ERROR: pip‘s dependency resolver does not currently take into account all the packages that are inst
- win10计算机网线直联,教你win10两台电脑网线直连传输文件的方法
- C#下usb条码扫描枪的钩子实现的改进
- docker 离线安装字体库
- 双臂魔方机器人的学习
- springMVC + Dubbo + zooKeeper超详细 步骤
- 如何求水平渐近线(例题讲解)
- 全新修复版/官方代付系统/支付宝微信代付/企业付款/提现秒到
- JSDB.io - Javascript 的 Framework、Library 和 Tool 分類
- InsertBlock Method (ActiveX)
- 2022-4-16 Leetcode 633.平方数之和