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

标签 ios xcode compiler-construction xcode4 arm

如果正在进行许多浮点运算,Apple 建议为 ARM 而不是 thumb 进行编译。我的整个应用程序几乎就是一个大的浮点运算。

这是他们在 iOS 应用开发工作流程指南中所说的:

iOS devices support two instruction sets, ARM and Thumb. Xcode uses Thumb instructions by default because using Thumb typically reduces code size by about 35 percent relative to ARM. Applications that have extensive floating-point code might perform better if they use ARM instructions rather than Thumb. You can turn off Thumb for your application, so it compiles for ARM, by setting the Compile for Thumb build setting to No.

但是,我在build设置中找不到任何“为 Thumb 编译”设置。他们改名了吗?还是 Xcode 4 现在不可用?

最佳答案

首先,不为 Thumb 指令集编译以提高浮点性能的建议仅适用于旧的 ARMv6 设备。

ARMv7 硬件(iPhone 3G S 及更新机型,包括所有 iPad)使用更高效的 Thumb-2 指令集,不会出现同样的浮点运算速度减慢问题。对于 ARMv7 构建,在几乎所有为 Thumb 构建的情况下都建议使用它。我在我的回答中提供了更多细节 here .

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

如果您只想对您的 ARMv6 构建执行此操作,您可以转到build设置并将鼠标悬停在“其他 cflags”选项上。单击出现在该选项右侧的小加号按钮,并为 ARMv6 架构添加一个条件。再次执行此操作,为 ARMv7 架构创建一个。在 ARMv6 架构下,添加额外的编译器标志 -mno-thumb(正如 Kevin 所建议的)。

您最终应该得到如下所示的内容:

Build settings for ARMv6

我在我的一个应用程序中这样做,因为我确实看到了旧 ARMv6 设备的性能提升。但是,我的另一个应用程序在不为 ARMv6 上的 Thumb 构建时速度较慢,因此您需要首先分析它。

此外,还有currently a bug in the LLVM Compiler 3.0 that ships with Xcode 4.2 (据我所知,此问题已在 4.2.1 中修复)在 Thumb for ARMv6 下,浮点计算编译错误。如果您使用的是特定版本的 Xcode,则需要执行此操作才能在旧设备上正常运行。

关于ios - 有没有办法在 Xcode 4 中为 ARM 而不是 Thumb 编译?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8390606/

相关文章:

matlab - 在matlab中创建一个exe文件的问题

ios - FIRRemoteConfig.activateFetched() 失败

iphone - 如何只加载请求的 UIWebView url 的特定部分?

iphone - 在非英语语言的 iPhone 上使用 Google map 寻找方向

python - 扭曲的 self.transport.write() - Python - 附加输出

javascript - 来自 Trace Trees 的 Javascript 性能改进是否会进入其他解释语言?

c - 如何绕过 ARM 机器上的缓存

ios - 如何在多个 iOS 设备之间同步推送通知?

objective-c - 如何在单元测试中访问 NSDocumentDirectory (OCUnit)

objective-c - 如何将 NIB 文件中的对象发送到前/后?