在Xcode中编译i386和x86_64有什么区别?

8
在Xcode中使用i386和x86_64(在主窗口左上角的下拉菜单中选择)作为活动架构来编译Mac应用程序有什么区别?在项目的构建设置中,架构选项有标准(32/64位通用)、32位通用和64位英特尔。实际上,这些选项意味着什么,如何决定使用哪个选项?
假设目标是OS X 10.5及以上版本。我发现在Activity Monitor中,为x86_64编译会导致应用程序使用比为i386编译更多的内存。优势是什么?我知道64位是“未来”,但考虑到内存使用量更高,选择32位是否有意义?
3个回答

9

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;合成的ivars、非易碎的ivars、统一的C++/ObjC异常、零成本的@try块等等。此外,还有一些只有在64位下才可能进行的优化。


2

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基本上是根据在“有效架构”中设置的i386或x86_64来模拟32位或64位环境。

每种架构都需要不同的二进制文件,当您构建应用程序时,Xcode将为当前正在使用的任何内容构建正确的架构。例如,如果您要求它在模拟器中运行,则它只会构建i386版本(或64位版本的x86_64)。


0

除非你有理由编译x86_64,否则我建议只编译i386(如果你支持的话还可以编译PPC)。请阅读苹果公司的立场

虽然64位可执行文件使您更容易管理大型数据集(与32位应用程序中大文件的内存映射相比),但使用64位可执行文件可能会引起其他问题。因此,仅当64位环境为您的特定目的提供了强大的优势时,您应将软件转换为64位可执行格式。


4
虽然这适用于现有软件,但所有新软件都应编写和优化为64位。 - bbum

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接