我正在与一位朋友讨论优化问题,需要帮助找到这个问题的答案,并希望能够阅读一些官方文档以进一步了解问题。
我被告知,在生产环境中编译简单程序时(例如:
我被告知,在生产环境中编译简单程序时(例如:
CCOPTS+=-O4
,无调试等),以下代码将被优化:#define COEFFICIENT_F (5.0f)
...
...
float f = 1.0f / COEFFICIENT_F;
…将自动优化为以下内容:
#define COEFFICIENT_F (5.0f)
...
...
#define INV_COEFFICIENT_F (0.2f)
float f = 1.0f * INV_COEFFICIENT_F;
如果我正在编译调试版本(例如:CCOPTS+=-O0 DEBUG=-g
),那么代码将不会在预处理器级别优化此操作。
因此,我的问题有两个:
- 传递给编译器的优化级别是否影响预处理器所做的决策?
- 例如,GCC是否会自动执行这样的转换,包括在预处理时预先计算逆系数,并将其存储在我的代码的数据段中,同时通过乘以其倒数而不是除以其倒数进行计算?
谢谢!