C++内联函数解析

1:什么是内联函数?

函数声明的时候,在定义的地方增加inline关键字说明(注意是定义的地方不是声明的地方),则此函数为内联函数。

2:为什么要使用内联函数?

主要为性能考虑,减少因为函数调用引起开销,主要是参数压栈、栈帧开辟与回收,以及寄存器保存与恢复等。

3:为什么推荐使用内联函数代替宏?

因为宏容易出错,且不可调试。

4:使用内联函数的注意事项。

内联函数应该尽可能的简单短小,过长的函数,使用内联将导致内存消耗增大。

5:怎么使内联函数生效?

我们声明了内联函数,但是编译器可能不执行内联,所以要确定开启内联选项。

 

测试代码如下:

 1 #include <iostream>
 2 #include <time.h>
 3 
 4 using namespace std;
 5 int calc1(int a, int b)
 6 {
 7     return a + b;
 8 }
 9 
10 //inline int calc2(int a, int b) __attribute__((always_inline));   //强制开启内联选项
11 inline int calc2(int a, int b)
12 {
13     return a + b;
14 }
15 
16 #define CALCE(a, b) a + b
17 
18 int main(int argc, char *argv[])
19 {
20     int x[10000] = {0};
21     int y[10000] = {0};
22     int z[10000] = {0};
23     cout << "begin function" << endl;
24     time_t t = time(NULL);
25     for (int i = 0; i < 10000; ++i) 
26     {
27         for (int j = 0; j < 1000; ++j)
28         {
29             for (int k = 0; k < 1000; ++k)
30             {
31                 calc1(x[j], y[k]);
32             }
33         }
34     }
35     cout << "function used:" << (time(NULL) - t) << "" << endl;
36     cout << "begin inline" << endl;
37     t = time(NULL);
38     for (int i = 0; i < 10000; ++i) 
39     {
40         for (int j = 0; j < 1000; ++j)
41         {
42             for (int k = 0; k < 1000; ++k)
43             {
44                 calc2(x[j], y[k]);
45             }
46         }
47     }
48     cout << "inline used:" << (time(NULL) - t) << "" << endl;
49 
50     cout << "begin define" << endl;
51     t = time(NULL);
52     for (int i = 0; i < 10000; ++i) 
53     {
54         for (int j = 0; j < 1000; ++j)
55         {
56             for (int k = 0; k < 1000; ++k)
57             {
58                 CALCE(x[j], y[k]);
59             }
60         }
61     }
62     cout << "define used:" << (time(NULL) - t) << "" << endl;
63     return 0;
64 }

 

不开启内联选项的情况:

C++内联函数解析

 普通和内联函数基本没有差异, 宏的效率会高一些。 

开启内联选项:

C++内联函数解析

 证明内联函数在大量调用的情况下,会有明显的效率提升。 

注:本文不讨论g++编译的优化选项的问题-O, 因为优化后的程序测试,测试结果会有很多其他因素,后续单独整理。

 

原文链接: https://www.cnblogs.com/6-er-mi-hou/p/13158104.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    C++内联函数解析

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/356679

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年3月2日 上午11:20
下一篇 2023年3月2日 上午11:20

相关推荐