函数栈帧
.exe
call与ret
call指针只做两件事:
- 将下一条指令入栈,即返回地址,被调用函数执行结束后可直接跳回这里继续执行
- 跳转到被调用函数入口处开始执行(被调用者是通过栈指针sp+偏移找到对应指令进行执行的)
ret指令同样做两件事:
- 弹出返回地址
- 跳转到返回地址
defer与返回值
func Method() int {}resultreturn aresult = afunc Method() (a int) {}
.exe
func Method() int {}resultreturn aresult = afunc Method() (a int) {}