如果我为数学运算编写一行代码,例如:
x = 109.0f*768.0f/320.0f;
结果(261.6f)是在编译时还是运行时计算的?换句话说,Xcode的优化是否认识到硬编码数学运算的结果总是相同的,因此可以在编译时预先计算?
答案 0 :(得分:4)
它是在编译时计算的,至少使用Xcode目标iOS。这个功能:
float test() {
float x = 109.0f*768.0f/320.0f;
return x;
}
编译这三条指令:
movw r0, #52429
movt r0, #17282
bx lr
C标准不要求在编译时计算值。实际上,如果设置FENV_ACCESS
编译指示,则有些情况下禁止在编译时计算它。启用FENV_ACCESS
不会影响此测试用例中生成的指令。