显然,armv7适用于较新版本的iOS...它是否更快?更小?在X方面表现更好?
老款 iOS 设备(iPhone、iPhone 3G、第一、二代 iPod touch)只支持 armv6 指令集。而 iPhone 3G S(以及 iPad 和第三代 iPod touch)则拥有更新的处理器,同时支持 armv7 指令集。通常情况下,在这些新型处理器上,armv7 比 armv6 更快,建议您至少在应用程序中包含一个 armv7 构建版本(对于仅面向 iPad 的应用程序,您可能只需构建为 armv7)。
正如 Jasarien 指出的那样,指令集之间最大的区别在于浮点运算。在 armv6 上,应用程序往往使用缩小的 Thumb 指令集来生成较小的二进制文件,但是 Thumb 浮点性能非常差。因此,如果您想要更快的浮点计算,就需要禁用 Thumb。在 armv7 上,Thumb-2 指令集不再有这个限制,因此 Apple 建议您几乎始终使用它编译。
您可以将 Thumb 构建设置作成条件性的,以便在旧设备上关闭,而在新设备上打开。要做到这一点,请转到 Xcode 构建设置并选择“针对 Thumb 进行编译”选项。转到屏幕左下角的菜单并选择“添加构建设置条件”选项。在新的构建设置条件中,选择架构为 ARMv6,关闭 Thumb,再添加另一个条件,选择架构为 ARMv7,启用 Thumb。
根据 Stephen Canon 的答案(链接地址),armv6 硬件支持单精度和双精度浮点运算。我发现,在这个平台上,单精度算术表现略好,可能是因为更多操作适合缓存。在 armv7 上,NEON SIMD 浮点单元仅适用于单精度运算,因此单精度和双精度运算之间的性能差异可能会很大。
其他可能与此主题相关的问题包括:
较大的区别之一是armv6架构具有双精度浮点运算的硬件支持,而armv7仅提供双精度浮点运算的传统软件支持。
为了补偿,armv7架构拥有一个“NEON”单元,提供了惊人的快速单精度浮点运算的硬件支持。
如果您正在进行任何涉及浮点运算的工作,无论是使用单精度还是双精度,都需要考虑这一点。如果您正在使用双精度,但并不一定需要那么高的精度,那么在armv7设备上使用单精度,可能会获得显着的性能提升。
苹果公司在今年的WWDC会议上涵盖了armv6和armv7之间的许多差异以及Accelerate框架的介绍。这些视频应该仍然可以在iTunes上找到(截至2010年7月)。
如果您希望您的应用程序在iPad和所有iPhone / iPod toch模型上运行,则必须同时进行编译。旧的iOS设备使用arm6,而新的设备使用arm7。
不为其中之一编译的唯一原因是减小应用程序大小,因为它只需要代码的一个已编译版本。但是,除非您有一个非常大的代码库,否则文件大小差异将是相当微小的。
ARM7更适用于iPod Touch(第三代)和iPhone 3GS及更新的设备。在为较旧的设备构建时,您需要使用“Standard/arm6+arm7”。实际上,在我的应用中,我没有看到太大的性能差异。
v
。 - lucius