10.2.2 ABI

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

Go 的当前ABI使用栈(Stack)作为存储中介,即在进行函数调用时,通过栈来传递函数参数与返回值。这种 ABI 的优点是平台无关,由于使用的是主存,所以同一套机制可以应用在不同的硬件体系上;缺点是性能会受影响,因为 CPU 从主存读写数据的速率远低于从寄存器读写。当前 Go 团队正在重写 ABI,使用基于寄存器的ABI替换当前实现,预估总体可以获得 %5 的性能提升。

最后更新于