本文涉及的go版本为1.15.6,其他版本可能有区别!!!
go中的函数栈布局是怎么样的呢?本文将会会通过下面这个例子来展开。
package function_stack
func sum(a, b int) int {
a2 := a * a
b2 := b * b
c := a2 + b2
return c
}
func main() {
sum(1, 2)
}
- 执行如下命令
1 编译成可执行文件 go tool compile -N -l function_stack_test.go
2 反编译 go tool objdump function_stack_test.o
- 输出如下汇编代码(输出结果做了一定的精简)
//main函数对应的汇编代码
function_stack_test.go:12 0x3f7 MOVQ GS:0, CX [5:9]R_TLS_LE
function_stack_test.go:12 0x400 CMPQ 0x10(CX), SP
function_stack_test.go:12 0x404 JBE 0x437
function_stack_test.go:12 0x406 SUBQ $0x20, SP //预留32字节空间
function_stack_test.