|
|
1
230
避免函数调用的成本只是成功的一半。 做:
在开发库时,为了使类将来可以扩展,您应该:
关于性能,明智的方法是(一如既往)评测应用程序,然后最终
参考资料:
编辑:Bjarne Stroustrup,C++编程语言:
编辑2:ISO-IEC 14882-1998,7.1.2功能说明符
|
|
|
2
62
鉴于上述规则,
编译器可以
内联
(即用执行该函数操作的代码替换对该函数的调用)它选择的任何函数调用。过去的情况是,它“显然”无法内联一个与调用不在同一转换单元中声明的函数,但随着链接时间优化的使用越来越多,即使现在也不是这样。同样正确的是,函数标记为
|
|
|
3
11
告诉编译器内联函数是一种优化,最重要的优化规则是过早优化是万恶之源。始终编写清晰的代码(使用高效的算法),然后分析您的程序,只优化耗时过长的函数。 如果您发现一个特定的函数非常简短,并且在一个紧密的内部循环中被调用了数万次,那么它可能是一个很好的候选者。
|
|
|
4
5
找到答案的最好方法是分析你的程序,标记那些被多次调用的小函数,并将CPU周期消耗殆尽
|
|
|
5
5
过早优化是万恶之源!
另一方面,大多数现代编译器都有相当好的优化算法,可以内联您应该内联的内容。 重新使用——编写内联单行函数,稍后再考虑其他函数。 |
|
|
6
3
读者立即知道代码的完整语义。 |
|
|
7
1
最好的方法是检查和比较生成的内联和非内联指令。然而,省略总是安全的
|
|
|
9
1
一个人应该使用 内联 |
|
|
10
0
我通常遵循一条经验法则,在这里我用3-4条简单语句作为内联语句生成一个函数。但最好记住,这只是对编译器的一个提示。使其内联或不内联的最后一个调用仅由编译器执行。如果有比这更多的语句,我不会声明内联为一个愚蠢的编译器,它可能会导致代码膨胀。 |
|
|
11
0
在决定是否使用内联时,我通常会记住以下想法:在现代机器上,内存延迟可能是比原始计算更大的瓶颈。通常被调用的内联函数会增加可执行文件的大小。此外,这样的函数可以存储在CPU的代码缓存中,这将减少需要访问代码时缓存未命中的次数。
我通常在下面列出的情况下使用内联。然而,当您真正关心性能时,分析是必不可少的。此外,您可能需要检查编译器是否真正接受了提示。
|
|
|
12
0
当
|
|
|
13
0
当您认为您的代码足够小,可以用作内联函数并记住内联函数时,请复制您的代码并将其粘贴到调用该函数时,这样做可能足以增加执行时间,但也会增加内存消耗。 在使用循环/静态变量/递归/开关/转到/虚拟函数时,不能使用内联函数。 在编译过程中,虚拟方法会一直等到运行时和内联方法,所以它们不能同时使用。 |
|
|
14
-3
我读了一些答案,发现有一些东西遗漏了。 我使用的规则是不使用内联,除非我希望它是内联的。看起来很傻,现在解释一下。 编译器足够聪明,短函数总是使内联。而且永远不要将长函数作为内联函数,除非程序员要求这样做。
事实上
那么什么时候使用呢
例如,我有以下功能:
|
|
|
MaPo · Linux,设置锁定ICMP_过滤器选项 1 年前 |
|
Doohyeon Won · 内联函数上的奇怪现象?[关闭] 1 年前 |
|
|
Bobby · 复合字面值总是左值吗? 1 年前 |
|
9-Pin · C: 嵌套结构的堆栈内存分配 1 年前 |