【发布时间】:2015-04-18 18:24:44
【问题描述】:
我在一些地方读到gcc 尝试在使用-O2 调用时执行尾调用优化,但不使用-O3。为什么后者的优化不如前者?前者应该执行较少的优化。
【问题讨论】:
-
“在几个地方”:注意指出这些吗?
标签: gcc compiler-optimization tail-recursion
我在一些地方读到gcc 尝试在使用-O2 调用时执行尾调用优化,但不使用-O3。为什么后者的优化不如前者?前者应该执行较少的优化。
【问题讨论】:
标签: gcc compiler-optimization tail-recursion
我认为这不准确。在 gcc 文档 (https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html) 中,标志 -foptimize-sibling-calls 负责消除尾递归,并在 -O2 和 -O3 中启用。
-foptimize-sibling-calls
Optimize sibling and tail recursive calls.
Enabled at levels -O2, -O3, -Os.
【讨论】:
实时调频。
-O3 开启 -O2 指定的所有优化
(https://gcc.gnu.org/onlinedocs/gcc-4.9.2/gcc/Optimize-Options.html#Optimize-Options)
【讨论】: