8

我听说在 iPhone 目标的设置中关闭“为拇指编译”以提高性能可能是个好主意。不过,我在找到此设置时遇到了一些麻烦。由于我在当前项目中找不到它,我决定制作一个新的(我可以找到并设置它),并将我的文件复制到它(同时更新我正在使用的所有库) )。

但现在看来这个设置也从这个新项目中消失了。无论我选择什么 SDK,模拟器或设备,该设置都不会显示在目标设置中!然而,我似乎仍然突然在“用户定义”类别下有一个名为 GCC_THUMB_SUPPORT 的变量。这是什么?

我尝试创建一个新目标,但该设置也不会显示在其中(甚至没有 GCC_THUMB_SUPPORT)。

4

4 回答 4

14

GCC_THUMB_SUPPORT 是正确的变量。只需将其设置为 NO 即可禁用 THUMB 代码生成。
THUMB 的一般规则是,如果您的代码重浮点数,则禁用它 :)
更多关于这里的信息。

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

于 2009-09-22T14:23:55.443 回答
3

我发现编译器设置(“GCC 4.2 - 代码生成”、“GCC 4.2 - 语言”等)仅在 Active SDK 设置为设备时显示在目标信息构建设置窗口中——并且“用户-defined" 类别仅在活动 SDK 为模拟器时显示。

是的,如果您处理大量浮点数学(例如浮点音频处理),​​禁用 Thumb 编译对性能有很大帮助。当然,虽然它不是一个万能的魔法加速(据说 Thumb 编译的代码在某些情况下可以运行得更快),所以如果你的代码有这种瓶颈,你可能只会发现禁用 Thumb 有用。

于 2009-11-02T10:03:02.567 回答
2

“Compile for Thumb”应该Target/Get Info/GCC 4.2 - Code Generation下。如果它不存在(如果它不存在,我会感到惊讶),设置用户定义的变量。

请记住,这仅在您在摆弄它之前应该了解的少数情况下才能提高性能。

于 2009-09-22T16:32:06.137 回答
2

ARM 的标准指令集是 4 字节。使用“Compile for Thumb”,编译器能够使用 2 字节指令。这导致库更小,但也更慢(有点值得商榷)。更关键的是,在 ARMv6 下运行存在问题。在我们的例子中,我们无法从 Monotouch 生成稳定的输出(在 MT4.0 alpha 中修复)。在 Xcode 中,您可以通过单击 Target 并在 Build 下查找并搜索“thumb”来找到设置。我的在 GCC 4.2 - 代码生成下,但有时它在 LVVM GCC 4.2 下。

为拇指编译

于 2011-03-20T22:56:52.000 回答