【问题标题】:Are hard-coded math operations performed at compile time or run time in Objective-C in Xcode?在 Xcode 的 Objective-C 中,硬编码的数学运算是在编译时执行还是在运行时执行?
【发布时间】:2012-02-19 00:38:54
【问题描述】:

如果我为一个数学运算写一行代码,比如:

x = 109.0f*768.0f/320.0f;

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

【问题讨论】:

    标签: objective-c ios xcode clang optimization


    【解决方案1】:

    它是在编译时计算的,至少使用面向 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 不会影响本测试用例中生成的指令。

    【讨论】:

    • @rob 您使用的“优化级别”的值是多少? “Optimization Level = None”时是否还在优化?
    • 它是-O0(没有优化)。
    猜你喜欢
    • 2019-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-06
    • 1970-01-01
    • 1970-01-01
    • 2012-06-26
    • 2010-09-19
    相关资源
    最近更新 更多