gpt4 book ai didi

go - 为什么当我在main中打印指向函数中声明的变量的取消引用的指针时,它不打印垃圾内存?

转载 作者:行者123 更新时间:2023-12-01 22:45:16 25 4
gpt4 key购买 nike

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{}
}

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

关于go - 为什么当我在main中打印指向函数中声明的变量的取消引用的指针时,它不打印垃圾内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60202155/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com