内联函数_为什么能提高效率

1、去年年底我听见这样一句话“将所有函数内联,执行效率能够更高,函数本不应该存在”,对于一个大学才接触编程,大一看了一年动漫,大二看了一年小说,大三才开始拿起《C++程序设计》(狗都不愿意吃的青春啊),毕业不到一年的小菜鸟我来说,这简直是毁三观的陈述,我认为他的话是错误的,但是说不出充分的原理,编码也是如此,写的代码自己都有一种奇怪的感觉,那么它一定有问题或者存在更为合理优越的实现。

2、内联函数的基本工作原理的将函数调用替换为函数实体,直观上能①减去函数调用的开销,但是这也可能导致代码体积膨胀,所以成为内联函数的要求有函数实体小这一说。(如果函数实体的汇编输出,将比函数调用产生的汇编输出还小,不用考虑了,内联吧)

3、可能是因为上面的原因,我看过很多不管多复杂的类的构造函数、析构函数都是内联的,如果这个类的继承层次有一定深度、组件足够多,那么我们就需要重新考虑了,这种情况是我们要尽量避免的。

4、目前的编译器都会有优化的功能,而且一般的优化都是针对的连续代码进行优化,②内联函数能够使编译器对代码进行更好的优化。(代码优化我相信编译器会比我们一般人做的好很多,所以当我们需要优化自己的代码时,着重点应该在于算法、软件结构等较高层次进行)

5、感觉上2->3->4,证明了1中的那句话,到目前为止内联给我们到来的麻烦仅是代码体积膨胀,编译出来的执行程序中的text段比较大而已,请记住这一点。

6、大家都知道现在计算机的存储结构,这里只考虑高速缓存到内存这一部分,从高到低,每一级的访问时间近似以成千倍甚至更高的增加。

7、为提高高速缓存的利用率,计算机是将其分页分段进行更为有效的管理的。

8、高速缓存的大小是很小的(对于我们运行的程序来说),所以我们的数据不可能都被装载到高速缓存中,这就引出了一个命中率的问题。在不命中的时候,就需要向更为下层的存储结构寻找索取目标数据,宝贵的时间也因此不断大幅增加。

9、回到5,我们因为使用大量内联是text增大,那么相应的能够存活在高速缓存的内容比例也就相对的减小,命中率因此降低,因为存储结构的问题,我们过度的使用内联得到了相反的结果。

10、干啥都要有个度,越过这个度以后,我们往往会适得其反。

时间: 2024-08-03 16:33:18

内联函数_为什么能提高效率的相关文章

内联函数 inline 漫谈

内联函数存在的结论是: 引入内联函数是为了解决函数调用效率的问题 由于函数之间的调用,会从一个内存地址调到另外一个内存地址,当函数调用完毕之后还会返回原来函数执行的地址.函数调用会有一定的时间开销,引入内联函数就是为了解决这一问题. 不用inline修饰的函数, 汇编时会出现 call 指令.调用call指令就是就需要: (1)将下一条指令的所在地址入栈 (2)并将子程序的起始地址送入PC(于是CPU的下一条指令就会转去执行子程序). 原因 因为调用函数实际上将程序执行顺序转移到函数所存放在内存

【转】ios内联函数 inline

ios内联函数 inline 缘由 由于在学习使用UIScrollVew开发的过程中,碰到下面这个属性(设置内边距): @property(nonatomic) UIEdgeInsets scrollIndicatorInsets; // default is UIEdgeInsetsZero. adjust indicators inside 1 光看UIEdgeInsets这个类型,一时还不知道它的具体内部结构是怎么样的,于是继续点进去发现它的定义如下: typedef struct UIE

const成员函数,内联函数,友元函数,static成员

原文链接:https://blog.csdn.net/qq_38646470/article/details/79795538专栏链接:https://blog.csdn.net/column/details/20026.html[TOC]#1.const成员函数const修饰成员函数在成员函数后面加const,const修饰this指针所指向的对象,也就是保证调用这个const成员函数的对象在函数内不会被改变. class Date { public : void Display () { c

内联函数知识点

内联函数知识点 1 内联函数是C++为提高程序运行速度所作的一项改进 编译器将使用相应的函数代码替换函数调用,嵌入在代码中.对于内联代码,程序无需跳到另一个位置处执行代码,再跳回来.因此内联函数的运行速度比常规函数稍快,但代价是占用更多内存.如果程序在10给地方调用同一个内联函数,则该程序包含十个内联函数副本. 2 有选择得使用内联 a.如果执行函数代码时间比处理函数调用机制得时间长,则节约得时间将只占整个过程的一小部分. b.函数过大不使用内联,有的编译器会不能认识. 3内联函数使用方式 a.

C++_内联函数

内联函数的目的是为了提高程序运行速度所做的一项改进. 常规函数与内联函数的区别不在于编写方式,而在于C++编译器如何将它们组合到程序中. 编译过程的最终产品是:可执行程序,由一组机器语言指令组成.运行程序时,操作系统将这些这令载入到计算机内存中. 常规的函数调用过程:执行到函数调用指令时,程序将在函数调用后立即存储该指令的内存地址.并将函数参数复制到堆栈(为此保留的内存块).跳到标记函数起点的内存单元,执行函数代码,然后跳回到地址被保存的指令处.来回跳跃并记录跳跃位置意味着以前使用函数时有一定的

面向对象程序设计-C++_课时18内联函数

使用inline说明的函数称内联函数. 在C++中,除具有循环语句.switch语句的函数不能说明为内联函数外,其他函数都可以说明为内联函数. 1 #include <iostream> 2 using namespace std; 3 4 inline int f(int i) 5 { 6 return i * 2; 7 } 8 9 void main() 10 { 11 int a(4); 12 int b = f(a); 13 14 std::cout << a <&l

关于C++内联函数

关于C++内联函数有以下实验: 有三段测试代码 1.手动展开内联函数. 2.非内联函数. 3.inline标记的内联函数.(函数只有一行代码,以确保函数被内联) 测试三种情况: VS工程在Release版下的有关内联的三个设置选项 1./Ob0 禁用内联展开(默认情况下是打开的). 2./Ob1 只展开标记为 inline 或 __inline 的函数,或在类声明内定义的 C++ 成员函数中的函数. 3./Ob2 展开标记为 inline 或 __inline 的函数和编译器选择的任何其他函数(

内联函数详解

什么是内联性和外联函数 类的成员函数可以分为内联函数和外联函数.内联函数是指那些定义在类体内的成员函数,即该函数的函数体放在类体内.而说明在类体内,定义在类体外的成员函数叫外联函数.外联函数的函数体在类的实现部分. 内联函数在调用时不是像一般的函数那样要转去执行被调用函数的函数体,执行完成后再转回调用函数中,执行其后语句,而是在调用函数处用内联函数体的代码来替换,这样将会节省调用开销,提高运行速度. 内联函数与前面讲过的带参数的宏定义进行一下比较,它们的代码效率是一样的,但是内联函数要优于宏定义

宏与内联函数

第一部分:宏 为什么要使用宏呢? 因为函数的调用必须要将程序执行的顺序转移到函数所存放在内存中的某个地址,将函数的程序内容执行完后,再返回到转去执行该函数前的地方.这种转移操作要求在转去执行前要保存现场并记忆执行的地址,转回后要恢复现场,并按原来保存地址继续执行.因此,函数调用要有一定的时间和空间方面的开销,于是将影响其效率.而宏只是在预处理的地方把代码展开,不需要额外的空间和时间方面的开销,所以调用一个宏比调用一个函数更有效率. 但是宏也有很多的不尽人意的地方. 在C语言中: 1.宏容易出现一