0

我最近在我的 x86 intel MacBook 上编译了一个我用 gcc 编写的 C 程序 - 我将这个二进制文件下载到我的 M1 MacBook 上,它似乎运行良好......这挑战了我的理解,因为我认为它必须符合特定的指令集(在这种情况下为x86)..我想知道我的MacBook中是否有一些软件层自动将x86“组装”成ARM

有任何想法吗?

4

2 回答 2

3

MacOS 包含从 x86 进行动态二进制转换的Rosetta 2软件,因此 x86 软件可以在 M1 CPU 上运行。不如直接从 C 编译成 AArch64 机器代码的代码那么高效,但它可以工作。

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

Stack Overflow 有一个标签:

苹果网站上还有一个问题:Rosetta 2 是如何工作的?其中答案指出翻译只完成一次并被缓存,因此它可以花费大量时间优化翻译。(对于非 JITed x86 代码。)

于 2021-11-25T09:18:56.243 回答
1

Apple 决定从 Intel 过渡到 Arm 处理器,这是一个重大决定,因为多年来为 Intel 架构开发的应用程序数量众多。

Arm 和 Intel 的指令集不同,针对 Intel 架构编译的程序无法在 Arm 架构上原生运行。指令集受到保护,公司复制竞争对手的指令集是非法的。

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

如果你想深入研究这个主题,我推荐这篇关于 Intel 和 Arm 架构之间区别的文章。

于 2021-11-25T09:37:47.860 回答