在Xcode中的Objective-C中是在编译时还是在运行时执行硬编码数学运算?

时间:2012-02-19 00:38:54

标签: objective-c ios xcode clang optimization

如果我为数学运算编写一行代码,例如:

x = 109.0f*768.0f/320.0f;

结果(261.6f)是在编译时还是运行时计算的?换句话说,Xcode的优化是否认识到硬编码数学运算的结果总是相同的,因此可以在编译时预先计算?

1 个答案:

答案 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不会影响此测试用例中生成的指令。