三行代码  ›  专栏  ›  技术社区  ›  Collin Quiason Rottinghaus

为什么我可以在ARM上运行x86二进制文件?

  •  2
  • Collin Quiason Rottinghaus  · 技术社区  · 5 天前

    我最近在x86 intel MacBook上编译了一个用gcc编写的C程序——我把这个二进制文件下载到我的M1 MacBook上,它似乎运行得很好。。。这对我的理解提出了挑战,因为我认为它必须针对特定的指令集(本例中为x86)进行编译。。我想知道我的MacBook中是否有软件层自动将x86“组装”到ARM中

    2 回复  |  直到 5 天前
        1
  •  3
  •   Peter Cordes    5 天前

    Rosetta 2 从x86执行动态二进制转换的软件,以便x86软件可以在M1 CPU上运行。不像直接从C编译到AArch64机器代码的代码那样高效,但它可以工作。

    您可以在此处阅读更多内容: https://developer.apple.com/documentation/apple-silicon/about-the-rosetta-translation-environment

    堆栈溢出有一个标记: .

    How does Rosetta 2 work? 其中,答案指出翻译只完成一次并缓存,因此它可以花费大量时间优化翻译。(对于非JIT x86代码。)

        2
  •  1
  •   panic    5 天前

    苹果决定从英特尔过渡到arm处理器,这是一个重大决定,因为多年来为英特尔体系结构开发的应用程序数量众多。

    Arm和英特尔指令集不同,为英特尔体系结构编译的程序无法在Arm体系结构上本机运行。指令集受到保护,公司复制竞争对手的指令集是违法的。

    Rosetta 是此指令集不兼容问题的解决方案。Rosetta是一种将Intel指令转换为arm指令的指令翻译。由于M1芯片的性能,性能影响可以忽略不计,但长期解决方案是将x86_64应用程序重新编译到M1体系结构。XCode已经发布了 toolchain 为了这个。

    如果你想深入研究这个问题,我推荐你 this article

    推荐文章