## x86 整数加法:编译器技巧 x86 汇编处理整数加法的方式与 ARM 等架构不同。虽然 ARM 允许直接的“结果 = 操作数1 + 操作数2”指令,但 x86 的 `add` 指令会修改第一个操作数 (`lhs += rhs`),缺乏专用的目标寄存器。 编译器通过巧妙地利用 x86 强大的内存寻址系统来克服这个限制。`mov` 指令可以直接访问内存,而无需专门的加载/存储,寻址模式允许在单个指令中进行复杂的计算。 `lea` (加载有效地址) 指令*计算*内存地址,而无需实际访问它。这被用于加法:通过将加法构建为计算一个由操作数偏移的内存地址,寻址硬件执行加法。 这个 `lea` 技巧有效地实现了三操作数加法,指定了目标寄存器并保留了原始操作数的值。虽然它涉及 64 位计算,即使是 32 位加法也是如此,但多余的位会被丢弃。这种技术通常可以节省一条指令并提高性能,编译器会自动在有利的情况下使用它。
## AWS Lambda 性能基准测试总结 (2025)
最近的基准测试比较了 AWS Lambda 在 x86_64 和 arm64 架构上的性能,使用了 Node.js、Python 和 Rust 运行时,以及 CPU 密集型、内存密集型和轻量级工作负载。结果压倒性地支持 **arm64**,在性能相同或更好情况下,计算成本降低了大约 **30-40%**。
**主要发现:**
* **Rust 在 arm64 上**始终提供最高的性能和成本效益。
* **Python 3.11 在 arm64 上**优于较新的 Python 版本。
* **Node.js 22 在 arm64 上**比 Node.js 20 在 x86_64 上快约 15-20%。
* 在所有运行时中,**冷启动**在 arm64 上快 13-24%。
该基准测试从头开始构建,因为缺乏之前 AWS 基准测试的公开代码,并且是完全 **开源** 的,可在 [GitHub](https://github.com/aws-lambda-performance-benchmarks) 上获取。它包括详细的文档和已发布的测试结果。
除非存在兼容性问题,否则 **建议将 arm64 作为新 Lambda 函数的默认架构**。这在不牺牲性能的情况下提供了显著的成本优势,使其成为大多数工作负载的直接优化方案。该基准测试强调了使用特定用例进行测试的重要性,但为 arm64 和较新运行时带来的好处提供了强有力的证据。