【发布时间】:2011-10-29 18:36:27
【问题描述】:
在 C++ 中,什么是估计内联函数的计算时间优势的良好启发式方法,特别是当函数被非常频繁地调用并且占程序执行时间的 >= 10% 时(例如,蛮力或随机优化过程)。尽管内联最终可能超出我的控制范围,但我仍然很好奇。
【问题讨论】:
-
如果它被递归调用,那么它不能被完全内联(除非递归是静态有界的,但这很难检测到)。
-
您知道可以使用
__inline__(GCC) 或__forceinline(VC) 对内联进行“终极”控制吗? -
@larsmans 错了。阅读尾声。但即使是非尾递归函数有时也可以自动重构和内联。
-
@Konrad: 如果执行了 tail-recursion 优化,那么递归已经隐式内联了,所以尝试inline 外部调用(除非成本与递归无关,而是每个递归级别的成本问题,或者递归级别最小)
-
@Constantinius:Dong so 通常会适得其反。编译器在决定何时内联方面比人类好得多。强制编译器通常会导致次优代码。
标签: c++ optimization inlining