# 10.2.2 ABI

API是高级代码层面的调用约定，与 API 类似，[ABI(Application Binary Interface)](https://en.wikipedia.org/wiki/Application_binary_interface) 用来约定两个二进制模块之间的调用规则，即在机器代码层面约定如何进行符号解析、如何传递参数、如何接受返回值、如何表示数据类型、如何处理各类数据的大小以及如何对齐等。

Go 的[当前ABI](https://go.googlesource.com/go/+/refs/heads/dev.regabi/src/cmd/compile/internal-abi.md)使用栈（Stack）作为存储中介，即在进行函数调用时，通过栈来传递函数参数与返回值。这种 ABI 的优点是平台无关，由于使用的是主存，所以同一套机制可以应用在不同的硬件体系上；缺点是性能会受影响，因为 CPU 从主存读写数据的速率远低于从寄存器读写。当前 Go 团队正在重写 ABI，使用[基于寄存器的ABI](https://go.googlesource.com/proposal/+/master/design/40724-register-calling.md)替换当前实现，预估总体可以获得 %5 的性能提升。
