【发布时间】:2012-02-19 00:38:54
【问题描述】:
如果我为一个数学运算写一行代码,比如:
x = 109.0f*768.0f/320.0f;
结果 (261.6f) 是在编译时还是运行时计算的?换句话说,Xcode 的优化是否认识到硬编码的数学运算的结果总是相同的,因此可以在编译时预先计算?
【问题讨论】:
标签: objective-c ios xcode clang optimization
如果我为一个数学运算写一行代码,比如:
x = 109.0f*768.0f/320.0f;
结果 (261.6f) 是在编译时还是运行时计算的?换句话说,Xcode 的优化是否认识到硬编码的数学运算的结果总是相同的,因此可以在编译时预先计算?
【问题讨论】:
标签: objective-c ios xcode clang optimization
它是在编译时计算的,至少使用面向 iOS 的 Xcode。这个函数:
float test() {
float x = 109.0f*768.0f/320.0f;
return x;
}
编译成这三个指令:
movw r0, #52429
movt r0, #17282
bx lr
C 标准不要求在编译时计算值。事实上,如果你设置了FENV_ACCESS pragma,在某些情况下它会被禁止在编译时计算它。开启FENV_ACCESS 不会影响本测试用例中生成的指令。
【讨论】: