Arm64EC(“仿真兼容”)使你能够生成新的本机应用或增量转换现有 x64 应用,以利用 Arm 驱动的设备可以实现的本机速度和性能,包括更好的能耗、电池使用时间和加速 AI 和 ML 工作负载。
Arm64EC 是一个新的应用程序二进制接口 (ABI),适用于在使用 Windows 11 的 Arm 设备上运行的应用。 它是一项 Windows 11 功能,需要使用 Windows 11 SDK,在 Arm 上的 Windows 10 上不可用。
互操作性
构建为 Arm64EC 的代码可与在同一进程中仿真运行的 x64 代码互操作。 进程中的 Arm64EC 代码以本机性能运行,而任何 x64 代码都通过使用内置于 Windows 11 的仿真来运行。 即使应用依赖于尚不支持 Arm 的现有依赖项或插件,也可以开始将应用的某些部分重新生成为 Arm64EC,以获得本机性能的好处。
Arm64EC 通过遵循 x64 软件约定(包括调用约定、堆栈使用情况、数据结构布局和预处理器定义)保证与 x64 的互作性。 但是,Arm64EC 代码与构建为 Arm64 的代码不兼容,后者使用一组不同的软件约定。
基于 Arm 的 Windows 11 操作系统本身在很大程度上依赖于 Arm64EC 的互操作性来支持运行 x64 应用程序。 大多数操作系统代码在 Arm 上的 Windows 11 上由 x64 应用加载时被编译为 Arm64EC,从而提供该代码的本机性能,而无需应用程序感知。
x64 或 Arm64EC 进程可以加载并调入 x64 和 Arm64EC 二进制文件,而 Arm64 进程只能加载 Arm64 二进制文件。 这两种体系结构都可以加载 Arm64X 二进制文件,因为这些文件包含 x64 和 Arm64 的代码。
| 流程体系结构 | x64 二进制文件 | Arm64EC 二进制文件 | Arm64 二进制文件 |
|---|---|---|---|
| x64/Arm64EC | Supported | Supported | 不支持 |
| Arm64 | 不支持 | 不支持 | Supported |
同样,当进行生成时,Arm64EC 二进制文件可以链接到 x64 和 Arm64EC 库中,而 Arm64 二进制文件只能链接到 Arm64 库中。
| PE 体系结构 | x64 库 | Arm64EC 库 | Arm64 库 |
|---|---|---|---|
| Arm64EC | Supported | Supported | 不支持 |
| Arm64 | 不支持 | 不支持 | Supported |
有关 Arm64EC ABI 如何实现互操作性的更多详细信息,请参阅了解 Arm64EC ABI 和程序集代码。
使用 Arm64EC 在基于 Arm 的 Windows 11 上提高现有应用的运行速度
Arm64EC 使你能够以 增量方式 将现有应用中的代码从模拟转换到本机。 在此过程的每个步骤中,应用程序都会继续正常运行,而无需一次性重新编译。
上图展示了一个简化示例,其中完全模拟 x64 工作负荷花费了一定时间,然后通过使用 Arm64EC 逐步改进。
- 作为一个完全仿真的 x64 工作负载开始
- 将大多数 CPU 密集型部件重新编译为 Arm64EC 之后
- 在一段时间内继续重新编译更多的 x64 模块之后
- 完全本机化的 Arm64EC 应用的最终结果
通过重新编译占用最多时间或从 x64 到 Arm64EC 最占用 CPU 的模块,可以在每个步骤中获得最少工作量的改进。
应用依赖项
使用 Arm64EC 重新生成应用程序时,请使用 Arm64EC 版本的依赖项,但也可以依赖于 x64 版本的依赖项。 不能使用 Arm64 版本的依赖项。
Arm64EC 进程中的任何 x64 代码(包括来自依赖项的代码)在应用中的模拟下运行。 确定从 x64 过渡到 Arm64EC 以改进应用性能的 CPU 密集型依赖项的优先级。
识别 Arm64EC 二进制文件和应用
在 Arm 上的 Windows 11 上运行的应用与 Arm64EC 二进制文件交互,就像它们是 x64 二进制文件一样。 应用不需要知道二进制文件中的代码重新编译为 Arm64EC 的程度。
若要标识这些二进制文件,可以使用开发人员命令提示符 link /dump /headers查看它们。
File Type: EXECUTABLE IMAGE
FILE HEADER VALUES
8664 machine (x64) (ARM64X)
(x64) 和 (ARM64X) 的组合表示,尽管二进制文件仍显示为 x64,但二进制文件的某些部分将重新编译为 Arm64EC。 如果一个二进制文件具有包含 (ARM64) 和 (ARM64X) 的计算机标头,而且是一个 Arm64X PE 文件,则可以将其加载到 x64 和 Arm64 应用中。
还可以使用 Windows 任务管理器 来识别应用是否编译为 Arm64EC。 在任务管理器的“ 详细信息 ”选项卡中, “体系结构 ”列显示适用于主可执行文件部分或完全编译为 Arm64EC 的应用程序的 ARM64(x64 兼容 )。
后续步骤
请参阅 Arm64EC 入门,以了解如何使用 Arm64EC 生成或更新 Win32 应用。