是否有更快的方法来比较两个变量?

时间:2009-11-23 01:32:51

标签: iphone cocoa-touch performance

我有这段代码,其中Shark告诉我这是一个性能瓶颈:

CGFloat shortestDistance = (distanceA < distanceB) ? distanceA : distanceB;

所有这些值都是CGFloat。有没有更快的方法来确定哪一个更小并将其分配给shortestDistance?也许甚至通过引用而不是复制值?我该怎么做?以后如何访问?

不过,这是在非常紧密的循环中执行的代码。每秒约60次。

4 个答案:

答案 0 :(得分:10)

每秒60次紧密循环。就现代计算机而言,这是非常放松的。

似乎没有一种明显的方法可以改善这种表达方式;你确定Shark表明确切的语句是一个问题,还是指出了经常被调用的代码的更普遍的问题?

答案 1 :(得分:7)

您可能遇到的问题是拇指/手臂FPU问题。 iPhone应用程序默认编译为 thumb ,这是常规ARM表达式的16位子集。在 thumb 模式下,使用整数例程完成浮点运算。您可以关闭它并提高浮点性能。请参阅“Break That Thumb For Best iPhone Performance”。

alt text

答案 2 :(得分:3)

distanceAdistanceB(或两者)是平方根的结果吗?鲨鱼追踪通常会归咎于消耗实际上很慢的操作结果的操作。你真的需要取两者的平方根,还是可以在平方距离上进行选择?

如果失败,(1)在定位ARMv6时关闭拇指,(2)使用__builtin_fminf(distanceA, distanceB)。然后继续寻找应用中真正的瓶颈;每秒60次无需担心。

答案 3 :(得分:0)

从内存现代CPU有6到9个管道,甚至更可能是自我上次检查以来。一旦优化器达到目的,你通常认为重CPU的实际上很少。