有没有办法在Xcode 4中编译ARM而不是Thumb?

如果有许多浮点操作正在进行,Applebuild议编译为ARM而不是拇指。 我的整个应用程序几乎是一个大的浮点操作。

以下是他们在“iOS应用程序开发stream程指南”中所说的内容:

iOS设备支持两个指令集,ARM和Thumb。 Xcode默认使用Thumb指令,因为使用Thumb通常相对于ARM将代码大小减less约35%。 具有大量浮点代码的应用程序如果使用ARM指令而不是Thumb,则性能可能会更好。 您可以closures您的应用程序的Thumb,以便它编译为ARM,通过将编译为Thumb构build设置设置为否。

但是,我的编译设置中找不到任何“编译为Thumb”设置。 他们重新命名了吗? 或者现在Xcode 4无法使用?

首先,为了改善浮点性能而不对Thumb指令集进行编译的build议仅适用于旧的ARMv6器件。

ARMv7硬件(iPhone 3GS和更新版本,包括所有iPad)使用效率更高的Thumb-2指令集,而不会遇到相同types的浮点数减速。 对于ARMv7构build,几乎在所有情况下build议您为Thumb构build。 我在这里的答案中提供了更多的细节。

这可能是为什么这个编译器设置不再作为常见选项公开的原因,因为ARMv7设备是绝大多数iOS设备。

如果您只想为ARMv6构build完成此操作,则可以转到构build设置并将鼠标hover在“其他C标记”选项上。 单击此选项右侧出现的小加号button,为ARMv6体系结构添加条件。 再次这样做,为ARMv7架构创build一个。 在ARMv6体系结构下,添加-mno-thumb的额外编译器标志(正如Kevin所build议的那样)。

你最终应该看起来像下面这样:

为ARMv6构建设置

我在我的一个应用程序中这样做,因为我看到旧版ARMv6设备的性能提升。 但是,另一个应用程序在没有为ARMv6构buildThumb时速度较慢,因此您需要首先对其进行分析。

另外, LLVM Compiler 3.0目前还有一个bug,在Xcode 4.2 (自4.2.1版本中已经修复了,我听说过)中,在ARMv6的Thumb下编译错误的浮点计算是错误的。 如果您使用的是特定版本的Xcode,则需要在较旧的设备上正确执行此操作。

我不知道“编译为Thumb”是否应该存在于Xcode 4中,但是您可以随时在其他C标志构build设置中添加-mno-thumb

关于您的原始问题:我注意到,Xcode 4.2.1中的“编译为Thumb”(在“项目构build设置”的“代码生成”一节下)仅在您使用LLVM GCC 4.2(如果设置为“ Compiler for C / C ++ / Objective-C“)!

如果使用Apple LLVM 3.0进行编译,则不会发现“编译为Thumb”选项。 但是 – 正如布拉德已经说过的 – 你仍然可以改变“其他C标志”选项来closures拇指模式。

另一个有趣的一点是:我在我的项目中使用sqlite合并源(我需要fts – 全文search),并且自从使用LLVM 3.0进行编译时,每当访问数据库时,在armv6设备上出现奇怪且相当随机的崩溃:事实certificate,因为编译armv6设备时Thumb模式没有被禁用。