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

时间:2010-07-16 16:17:57

标签: xcode 32bit-64bit

在Xcode中编译Mac应用程序与设置为i386 vs x86_64的Active Architecture(在主窗口左上角的下拉列表中选择)之间有什么区别?在项目的构建设置中,架构选项是标准(32/64位通用),32位通用和64位Intel。实际上,这些意味着什么以及如何决定?

假设一个目标是OS X 10.5及更高版本。我在Activity Monitor中看到,编译x86_64会导致应用程序使用的内存多于为i386编译的内存。有什么好处?我知道64位是“未来”,但考虑到更高的内存使用率,选择32位是否有意义?

3 个答案:

答案 0 :(得分:8)

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位中实现。

答案 1 :(得分:0)

除非您有理由为x86_64进行编译,否则我建议您只编译i386(如果您支持,则编译PPC)。关于此事,请阅读Apple's stance

  

虽然64位可执行文件可以实现   更容易管理大数据   集合(与内存映射相比)   32位应用程序中的大文件),   可以使用64位可执行文件   提出其他问题。所以你   应该将您的软件转换为   仅当64位可执行格式时   64位环境提供了引人注目的   为您的特定目的的优势。

答案 2 :(得分:0)

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)。