在Xcode中编译Mac应用程序与设置为i386 vs x86_64的Active Architecture(在主窗口左上角的下拉列表中选择)之间有什么区别?在项目的构建设置中,架构选项是标准(32/64位通用),32位通用和64位Intel。实际上,这些意味着什么以及如何决定?
假设一个目标是OS X 10.5及更高版本。我在Activity Monitor中看到,编译x86_64会导致应用程序使用的内存多于为i386编译的内存。有什么好处?我知道64位是“未来”,但考虑到更高的内存使用率,选择32位是否有意义?
答案 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)。