内联函数(inline) ,提高效率?

内联函数并非总是增加代码量,它旨在优化性能,尤其是在函数体较小时。内联可能导致程序执行文件增大,影响高速缓存命中率,但也能减少页面缺失和缓存未命中,从而提高速度。不过,过度使用内联可能导致相反效果。内联让编译器优化工作更有效,但需谨慎对待大型或析构函数。
摘要由CSDN通过智能技术生成

1、先说基本原则:

①当函数体比较小的时候, 内联该函数可以令目标代码更加高效. 对于存取函数以及其它函数体比较短, 性能关键的函数, 鼓励使用内联.
②一个较为合理的经验准则是, 不要内联超过 10 行的函数. 谨慎对待析构函数, 析构函数往往比其表面看起来要更长, 因为有隐含的成员和基类析构函数被调用!

2、内联一定会增加代码量吗?

不一定!

因为函数调用是需要开销的(函数调用时的参数压栈、栈帧开辟与销毁、以及寄存器保存与恢复等等操作),如果说函数本身的代码量比较小,比函数调用时做的准备工作的代码还要小,那此时如果使用内联的话,肯定比不使用内联的代码量还要小[2]。

不过如果函数的代码量稍大,通常还是会增加代码量的,因为内联函数是在编译阶段被编译器展开在调用处的,多次调用就需要多段重复的代码放在各个调用处。对于非内联函数,只需要保存一份函数体的代码,然后进行调用就好了。所以,在空间上,一般来说使用内联函数会导致生成的可执行文件变大。

3、使用内联函数后对于程序的性能会产生什么影响?

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

其次,高速缓存的大小是很小的(对于我们运行的程序来说),所以我们的数据不可能都被装载到高速缓存中,这就引出了一个命中率的问题。在不命中的时候,就需要向更为下层的存储结构寻找索取目标数据,宝贵的时间也因此不断大幅增加。正如我们前面所说,内联使用不当会导致编译出来的执行程序中的text

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值