内联函数 与 宏
目的:完全处于性能的考虑
机制:将被调用函数的函数代码直接地整个插入到函数被调用处
两种表现:
1. 关于类的成员函数
类外使用时,需要指定关键字inline
类内使用时,声明的同时提供函数体,inline不是必须的
2. 关于普通函数
需要加inline
原则:ODR原则,最好将内联函数都定义在一个头文件
优点:
1. 减少因为函数调用,主要是参数压栈,栈帧开辟与回收,以及寄存器的保存与恢复
2. 编译后, 代码集中,优化更彻底,(对最终代码优化可能更有贡献)
分析:
空间上:非内链函数代码只有一份,使用call指令调用
内联函数每个被调用出都有一份代码拷贝。
如果内联函数自己的函数代码量比自己函数调用的准备与善后引入的代码量小,则内联后代码量将变小
时间上:内联函数调用的代码是相邻的,同一页面或者连续页面,降低缺页率
建议:内联函数最好在开发后期引入,避免大量编译时间
修改/维护:修改内联函数需要重新编译真个工程
特点:inline只是对编译器的一种建议
内联虚函数:由于虚函数是晚绑定的,编译期不知道函数属于哪个版本
可以内联的情况: 1.通过对象
2.指针/引用 编译器确定虚函数具体版本
==================================================
宏: 内联函数:
1.由预处理器处理 1.编译器处理
2.对++/--操作有副作用 2.可能会被编译器拒绝(不一定内联)
3.难于调试 3.可能造成代码膨胀
4.必定被展开
==================================================
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1998958
分享到:
相关推荐
文章(一)内联函数与宏定义 在C中,常用预处理语句#define来代替一个函数定义。例如: #define MAX(a,b) ((a)>(b)?(a):(b)) 该语句使得程序中每个出现MAX(a,b)函数调用的地方都被宏定义中后面的表达式((a)>(b)?...
c++中的宏、内联函数和宏的比较 c++中的宏、内联函数和宏的比较 c++中的宏、内联函数和宏的比较 c++中的宏、内联函数和宏的比较 c++中的宏、内联函数和宏的比较
内联函数与宏本质上是两个不同的概念如果程序编写者对于既要求快速,又要求可读的情况下,则应该将函数冠以inline
本文主要介绍了预处理宏和内联函数的区别,转载的,希望大家一起分享
内联函数的执行过程与带参数宏定义很相似,但参数的处理不同。带参数的宏定义并不对参数进行运算,而是直接替换;内联函数首先是函数,这就意味着函数的很多性质都适用于内联函数,即内联函数先把参数表达式进行运算...
MATLAB中的内联函数借鉴了C语言中的内联函数,在C语言中,内联函数是通过编译器控制来实现的,它只在需要用到的时候,内联函数像宏一样的展开,所以取消了函数的参数压栈,减少了调用的时间和空间开销。在MATLAB中也...
一、inline 关键字用来定义一个类的内联函数,引入它的主要原因是用它替代C中表达式形式的宏定义。 表达式形式的宏定义一例: #define ExpressionName(Var1,Var2) ((Var1)+(Var2))*((Var1)-(Var2))为什么要取代这种...
内联函数和宏的区别,这是好多新手容易感觉困扰的地方 ,我也曾经困惑,故分享此资料,希望共同进步
内联函数的定义格式、编程风格、优缺点、使用注意事项,以及与宏的区别
C++语言内联函数的引出-宏函数的缺陷
宏和内联函数的作用和用法
内联函数的优越性:一:inline定义的类的内联函数,函数的代码被放入符号表中,在使用时直接进行替换(像宏定义一样展开),没有了调用的开销,效率很高。二:类的内敛函数是一个真正的函数。三:使用内联函数inline...
宏和内联函数的区别[归类].pdf
内联函数(内嵌函数,内置函数) 调用函数时需要一定的时间和空间的开销。C++提供一种提高效率的方法,即在编译时将函数调用处用函数体替换,类似于C语言中的宏展开。这种在函数调用处直接嵌入函数体的函数称为内联...
1、讲解内联函数的概念以及与C语言宏函数的关系; 2、进一步深入研究成员函数的原理;
介绍内联函数之前,有必要介绍一下预处理宏。内联函数的功能和预处理宏的功能相似。相信大家都用过预处理宏,我们会经常定义一些宏,如 代码如下:#define TABLE_COMP(x) ((x)>0?(x):0)就定义了一个宏。为什么要使用...