这两句反编译代码什么意思?go语言局部变量返回地址发生变量逃逸
在阅读封幼麟的深度探索go语言书时在分析局部变量逃逸时,有两句汇编代码不理解,希望大佬可以帮忙解答一下。
1. 运行环境
go 1.16
2. 问题描述?
代码:
package main
func main() {
println(*newInt())
}
//go:noinline
func newInt() *int {
var a int
return &a
}
书中提供的反汇编结果:
3. 您期望得到的结果?
铅笔字是我的分析,希望大家可以帮忙看下红字的两句汇编代码什么意思:
LEAQ 0x984c(IP),AX
MOVQ AX, 0(SP)
为什么a的地址保存在0x08(SP)中,0(SP)中保存的是什么呢?
4. 您实际得到的结果?
runtime.newobject
是 Go 运行时的一个内部函数,用于在堆上分配内存。它需要一个参数,这个参数是描述需要分配对象类型的 runtime._type
结构体指针。