在Xcode中编译i386与x86_64的区别?

在Xcode中编译i386与x86_64的区别?,xcode,32bit-64bit,Xcode,32bit 64bit,在Xcode中编译Mac应用程序时,活动体系结构设置为i386与x86_64(在主窗口左上角的下拉列表中选择)之间有什么区别?在项目的生成设置中,体系结构选项为标准(32/64位通用)、32位通用和64位Intel。实际上,这些意味着什么?人们如何决定 假设一个目标是OSX10.5及以上版本。我在Activity Monitor中看到,为x86_64编译的应用程序使用的内存比为i386编译的应用程序多。优势是什么?我知道64位是“未来”,但考虑到更高的内存使用率,选择32位有意义吗?32/64位

在Xcode中编译Mac应用程序时,活动体系结构设置为i386与x86_64(在主窗口左上角的下拉列表中选择)之间有什么区别?在项目的生成设置中,体系结构选项为标准(32/64位通用)、32位通用和64位Intel。实际上,这些意味着什么?人们如何决定

假设一个目标是OSX10.5及以上版本。我在Activity Monitor中看到,为x86_64编译的应用程序使用的内存比为i386编译的应用程序多。优势是什么?我知道64位是“未来”,但考虑到更高的内存使用率,选择32位有意义吗?

32/64位通用--i386,x86_64,ppc

32位通用--i386,ppc

64位英特尔--仅限64位英特尔

不再支持ppc64


x86_64二进制文件速度更快的原因有很多;更快的ABI,更多的寄存器,在许多(大多数&所有新机器)机器上,内核是64位的,内核调用更快,等等

虽然64位的内存开销通常与应用程序的数据结构的指针重直接相关,但请记住,32位应用程序在所有框架的32位版本中都存在阻力。如果您的应用程序是系统上唯一的32位应用程序,那么与64位版本相比,它将产生大量开销


64位应用程序还拥有最新和最好的Objective-C ABI;合成IVAR、非脆弱IVAR、统一C++/ObjC异常、零成本@try块等。。。还有许多优化也只能在64位中实现。

除非您有理由为x86_64编译,否则我建议只为i386编译(如果您支持PPC)。请阅读以下内容:

尽管64位可执行文件使其 便于您管理大型数据 集合(与的内存映射相比) 32位应用程序中的大文件), 64位可执行文件的使用可能会 提出其他问题。所以你 应该将您的软件转换为 仅当 64位环境提供了令人信服的 为您的特定目的提供优势


iOS应用程序需要在许多不同的体系结构上运行:

arm7: Used in the oldest iOS 7-supporting devices[32 bit]
arm7s: As used in iPhone 5 and 5C[32 bit]
arm64: For the 64-bit ARM processor in iPhone 5S[64 bit]

i386: For the 32-bit simulator
x86_64: Used in 64-bit simulator
Xcode基本上模拟32位或64位的环境,其基础是在有效的体系结构(分别是i386或x86_64)中设置的内容


每个体系结构都需要不同的二进制文件,当您构建应用程序时,Xcode将为您当前使用的任何应用程序构建正确的体系结构。例如,如果您要求它在模拟器中运行,那么它将只生成i386版本(或64位的x86_64)。

虽然这适用于现有软件,但所有新软件都应针对64位进行编写和优化。