关于代码优化中inline函数的使用

先说说内联函数的优点:
    将函数改写成inline函数, 可以避免当函数被调用时所发生的堆栈操作, 这自然可以提高代码的执行效率

一般将inline函数写在头文件中, 并且建议将其写在类结构之外, 也就是类结构定义的下面, 而不是写在类结构的里面.
当然写在里面也没什么不行, 只是如果写在外面的话, 代码看起来更为整洁, 自然也会增加代码的易读性. 达到一目而了然.

1. 应该使用inline函数的情况:
        当函数体比较小, 比如只有两三行, 可以考虑改写成inline函数
        当函数在循环体内, 或其他位置需要被反复调用多次的时候, 可以考虑使用

2. 不建议使用inline函数的情况:
        当函数体比较大, 比如达到20行或以上了,  不建议使用inline函数
        需要递归操作的函数不建议使用inline函数.

时间: 2024-08-25 23:48:20

关于代码优化中inline函数的使用的相关文章

C++中inline函数

(一)inline函数(摘自C++ Primer的第三版) 在函数声明或定义中函数返回类型前加上关键字inline即把min()指定为内联. inline int min(int first, int secend) {/****/}; inline 函数对编译器而言必须是可见的,以便它能够在调用点内展开该函数.与非inline函数不同的是,inline函数必须在调用该函数的每个文本文件中定义.当然,对于同一程序的不同文件,如果inline函数出现的话,其定义必须相同.对于由两个文件comput

C++中的Inline函数

在大多数机器上,函数调用does a lot of work:在调用函数前保存寄存器,调用结束后利用寄存器恢复现场:需要复制函数参数:程序跳转到新的位置执行... 内敛函数(inline function)则没有这个问题,简单的我们可以这样理解:Inline即“In line” 为什么说“In line”呢,先看内敛函数的声明: // inline version: find the shorter of two strings inline const string & shorterStri

matlab中关于函数句柄、feval函数以及inline函数的解析 (转)

http://blog.sina.com.cn/s/blog_7bff755b010180l3.html MATLAB函数句柄 函数句柄(Function handle)是MATLAB的一种数据类型. 包含了函数的路径.函数名.类型以及可能存在的重载方法: 引入函数句柄是为了使feval及借助于它的泛函指令工作更可靠:使“函数调用”像“变量调用”一样方便灵活:提高函数调用速度,特别在反复调用情况下更显效率:提高软件重用性,扩大子函数和私用函数的可调用范围:迅速获得同名重载函数的位置.类型信息.

inline函数在IAR中的使用

1.什么叫inline函数 inline其实是是C++关键字(但是IAR支持),在函数声明或定义中,函数返回类型前加上关键字inline,即可以把函数指定为内联函数.这样可以解决一些频繁调用的函数大量消耗栈空间(栈内存)的问题.用空间换效率.在调用inline函数时,编译器将函数在调用处展开,而不是直接调用.这种方式有点儿类似于宏定义. 优点是可以减少函数调用时间,和入栈出栈操作,也减少了栈空间的使用. 缺点是增加了代码空间,因此通常不在inline函数中执行太多的代码.也不能在inline函数

inline函数不能在for循环中使用的原因

inline函数的作用继承了宏定义的优点,没有了参数压栈,代码生成等一部分操作,并且摒弃了没有检查编译规则的缺点: 另外要注意,内联函数一般只会用在函数内容非常简单的时候,这是因为,内联函数的代码会在任何调用它的地方展开,如果函数太复杂,代码膨胀带来的恶果很可能会大于效率的提高带来的益处.内联函数最重要的使用地方是用于类的存取函数. 原因1: inline实际上“相当于”宏替换,就是把函数的二进制代码直接复制到调用的地方,因而inline代码不应该有跳转.而循环结构无法避免条件跳转,所以有循环的

C++中的函数对象(一)

STL中的函数对象,大多数STL类属算法(以及某些容器类)可以以一个函数对象作为参数.引入函数对象的目的是为了使算法的功能富于变化,从而增强算法的通用性. 所谓函数对象,是指一段代码实体,它可以不带参数,也可以带有若干参数,其功能是获得一个值,或者改变操作的状态.在C++编程中,任何普通的函数都满足这个定义,而且,任何一个重载了运算符operator()的类的对象也都满足这一定义,称为函数对象. 普通函数 int multfun(int x, int y) { return x*y; } 或者下

inline函数和一般的函数有什么不同

1.比如: 1 int g(int x) 2 { 3 return x + x; 4 } 5 6 int f() 7 { 8 return g(); 9 } 这样f会调用g,然后g返回x + x给f,然后f继续把那个值返回给调用者. 如果g是inline的话.f会被直接编译成. 1 int f() 2 { 3 return x + x; 4 } 相当于把g执行的操作直接融合到f里.这样减少了调用g消耗的时间,但同时也增大了f的尺寸. 这就是inline函数,也就是所谓的内联函数. 2.但是现在不

gcc 编译器对 inline 函数的支持

C99版的C语言引入了inline关键字开始支持inline 函数,在这之前传统的C语言(C89)是没有inline 关键字的,也不支持inline 函数.不过大多数 C89 的编译器都将inline作为一种附加特性早早的就加进去了.gcc 也不例外,不过gcc增加inline特性时C99还没定型,gcc中inline 的语意与C99也有些许的区别.这里就主要说说gcc 中的inline 特性. 另外,本文只讨论C语言,C++标准中很早就支持inline,不过inline的语意C和C++ 是有细

C++经典问答 inline 函数

inline函数的作用是什么? 在某些情况下,inline函数能使受计算量限制的应用程序运行的更快. 从广义上讲,inline函数的背后的思想是在调用函数的地方插入该函数的代码. 关键字"inline"和"inlined"函数之间的联系是什么? 用关键字inline修饰的函数可能不被直接插入,而直接插入的函数也可能不被标明为inline,被直接插入的惟一确定方式是根本不存在的! 关于直接插入有什么特殊的规则吗? 1.任何包含inline函数用法的源文件都必须包含该函