2020年1月30日星期四

变量逃逸:golang函数中分配的变量,函数结束的时候不会被释放吗?

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

没有评论:

发表评论