为什么x86架构编译的二进制文件可以在ARM架构的M1 Mac上运行?
原因说明
你看到的现象由苹果为M系列芯片Mac预装的Rosetta 2转译层实现,核心运行逻辑如下:
- 系统会自动识别x86_64架构的Mach-O二进制文件,首次运行前会在后台将整个x86程序完整转译为ARM64指令集的可执行文件,而非实时逐行转译,因此转译后的程序运行效率远高于普通模拟器
- 整个转译过程对用户完全无感,不需要手动做任何配置,触发转译后下次再运行同一个x86程序时会直接调用已经转译完成的ARM版本,不需要重复转译
- 对于仅依赖标准C库、系统公共API的普通C程序,Rosetta 2的转译兼容性接近100%,只有使用了x86专属特权指令、依赖旧版内核扩展的程序才会出现转译失败的问题
你可以在终端执行file [你的二进制文件路径]命令验证编译产物的架构,返回结果如果包含x86_64就说明是x86架构的程序。如果想要生成M1原生运行的二进制,可以在编译时给gcc加上-arch arm64参数,原生程序的运行性能通常比转译版本高30%以上。
内容的提问来源于stack exchange,提问作者Collin Quiason Rottinghaus
相关产品推荐
相关产品推荐

