C 语言的方式能够极大地减少函数调用的额外开销,但是也增加了实现的复杂度;
CPU 访问栈的开销比访问寄存器高几十倍;
需要单独处理函数参数过多的情况;
Go 语言的方式能够降低实现的复杂度并支持多返回值,但是牺牲了函数调用的性能;
不需要考虑超过寄存器数量的参数应该如何传递;
不需要考虑不同架构上的寄存器差异;
函数入参和出参的内存空间需要在栈上进行分配;
通过堆栈传递参数,入栈的顺序是从右到左,而参数的计算是从左到右;
函数返回值通过堆栈传递并由调用者预先分配内存空间;
调用函数时都是传值,接收方会对入参进行复制再计算;