登录
首页 >  Golang >  Go问答

为何在main函数中打印指向函数内声明变量的解引用指针时不会产生垃圾值?

来源:stackoverflow

时间:2024-02-19 09:54:22 231浏览 收藏

本篇文章给大家分享《为何在main函数中打印指向函数内声明变量的解引用指针时不会产生垃圾值?》,覆盖了Golang的常见基础知识,其实一个语言的全部知识点一篇文章是不可能说完的,但希望通过这些问题,让读者对自己的掌握程度有一定的认识(B 数),从而弥补自己的不足,更好的掌握它。

问题内容

package main

import "fmt"

func point(x int) *int {
    y := x
    return &y//Shouldn't this be deallocated
}

func main() {
    x := 10
    pointer := point(x)
    fmt.Println(*pointer)
}

调用函数后,y 的内存不应该是垃圾吗? 为什么我的程序仍然输出10。


解决方案


go编译器对变量进行逃逸分析,并决定将它们分配在栈上还是堆上。在您的示例中, point 返回 y 的地址,因此 y 转义 point。因此,y 是在堆中分配的,而不是在堆栈中分配的。

与 c/c++ 不同,从函数返回堆栈变量是完全可以的。很多类似构造函数的函数都写成:

func NewStruct() *Struct {
  return &Struct{}
}

这会在堆中分配一个结构,并返回指向该结构的指针。

以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持golang学习网!更多关于Golang的相关知识,也可关注golang学习网公众号。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>