3 函数调用协议
理解Go的函数调用协议对于研究其内部实现非常重要。这里将会介绍Go进行函数调用时的内存布局,参数传递和返回值的约定。正如C和汇编都是同一套约定所以能相互调用一样,Go和C以及汇编也是要满足某些约定才能够相互调用。
本章先从Go调用C和汇编的例子开始(非cgo方式),通过分析其实现学习Go的函数调用协议。然后将会研究go和defer关键字等神奇的魔法。接着会研究连续栈的实现,最后看一下闭包。
这一章的内容将是后面研究cgo,goroutine实现的基础。连续栈技术是Go能够开千千万万条“线程”而不耗尽内存的基本保证,也为cgo带来了很大的限制,这些将会在后面章节中再讨论。
好,让我们进入正题吧!