gpt4 book ai didi

go - 逃逸分析之前的变量生命周期是什么?

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

关闭。这个问题是not reproducible or was caused by typos .它目前不接受答案。












想改进这个问题?将问题更新为 on-topic对于堆栈溢出。

2年前关闭。




Improve this question




首先,如果这是一个明显或直接的答案,我深表歉意,但我似乎无法理解以下代码的确切过程。

package main

import (
"fmt"
)

func xyz() *int {
n := 42
return &n
}

func main() {
num := xyz()
fmt.Println("The number is", *num)
}

我的问题是变量 n 在逃逸分析之前是否被分配给堆栈,然后一旦超出范围,它会在分配给堆之前收集垃圾吗?当函数 xyz 返回时,Golang 如何处理指针?我要求一步一步的技术流程,但也要消除任何知识空白。

最佳答案

转义分析在编译时工作。当编译器实现变量n的地址时离开函数,它编译一个如下所示的函数:

func xyz() *int {
n:=newInHeap(int)
*n := 42
return n
}

在这里, newInHeap是一个假设函数,总是在堆中分配变量。常规 new如果变量没有转义函数,则可以在堆栈上分配变量。

返回指针的生命周期在运行时由常规 GC 规则控制。

关于go - 逃逸分析之前的变量生命周期是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61544414/

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