iPhone编译为Thumb模式

8
我听说关闭 iPhone 目标设置中的“编译为 Thumb”可能是提高性能的好主意。但我在寻找这个设置时遇到了一些麻烦。由于我在当前项目中找不到它,我决定创建一个新项目(可以找到并设置它),然后将我的文件复制到其中(同时更新我使用的所有库)。
但现在似乎这个设置也从这个新项目中消失了。无论我选择哪个 SDK,模拟器还是设备,该设置都不会显示在目标设置中!然而,我突然发现在“用户定义”类别下仍然有一个名为 GCC_THUMB_SUPPORT 的变量。这是什么?
我尝试创建一个新的目标,但该设置也不会在其中显示(甚至连 GCC_THUMB_SUPPORT 都没有)。
4个回答

14

GCC_THUMB_SUPPORT是正确的变量。只需将其设置为NO以禁用THUMB代码生成即可。
THUMB的一般规则是,如果您的代码使用了浮点运算,请禁用它 :)
有关更多信息,请在此处查看。

更新:
编译为THUMB指令集的建议不再适用(实际上从iPhone 3GS开始就不再适用)。


截至 iPhone 4、4g 和 5,这仍然相关吗? - Kyle
@weichsel clang怎么样?现在Xcode中使用的是它...拇指模式还有用吗? - lppier
自从 iPhone 3GS 推出以来,上述标志几乎不再相关 :) 我在原回答中更新了一个与 Thumb/ARM 编译相关的好的 SO 线程链接。 - Thomas Zoechling

3
我发现编译器设置(“GCC 4.2 - Code Generation”,“GCC 4.2 - Language”等)只会在目标信息构建设置窗口中显示,当活动SDK设置为设备时 - 当活动SDK设置为模拟器时,“用户定义”类别才会出现。
如果你处理大量浮点数运算(例如浮点音频处理),禁用Thumb编译可能会对性能有很大帮助。当然,这并不是一个万能的神奇加速方法(据说在某些情况下,Thumb编译的代码可以更快地运行),因此,如果你的代码有这种瓶颈,禁用Thumb才有用。

2
ARM的标准指令集是4字节。使用“编译为Thumb”选项,编译器可以使用2字节指令。这会导致库小很多,但速度也会变慢(这有点争议)。更重要的是,在ARMv6下运行时会出现问题。在我们的情况下,我们无法从Monotouch生成稳定的输出(在MT4.0 alpha中修复)。在Xcode中,您可以通过点击目标并查找“thumb”来找到设置。我的设置在GCC 4.2 - Code Generation下,但有时它会在LVVM GCC 4.2下。

2
"编译为Thumb" 应该在 目标/获取信息/GCC 4.2 - 代码生成 下。如果没有(如果没有,我会感到惊讶),请设置用户定义变量。
请记住,在调整之前,您应该了解仅在一组狭窄的情况下才能提高性能。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接