我们注意到有如下函数:
func newInt *int { var i int return &i //为何可以返回局部变量呢? } someInt := newInt()在Go中变量或者对象的保存不一定必须在栈或者堆中的,Go语言会根据变量在函数中的生命周期有关系,如果变量仅在函数中引用,那么就会保存在栈中,函数结束变量从栈中移除。如果函数中的变量不只是在函数中使用,比如列子中的,那么会将变量保存在堆中,所以列子中的变量是可以返回的,这就是Go的变量逃逸。
参考链接:
Go语言变量逃逸分析 - C语言中文网
没有评论:
发表评论