gpt4 book ai didi

go - golang变量的内存可以在其声明范围之外使用吗

转载 作者:数据小太阳 更新时间:2023-10-29 03:29:46 25 4
gpt4 key购买 nike

我想了解 go 中的内存管理。我可以安全地使用范围内分配的内存吗?

type BigConfigurationData struct {
subject1config *Subject1Config
subject2config *Subject2Config
...
}

var p BigConfigurationData
if aFlag {
var subject1config = Subject1Config {
foo: bar
}
p.subject1config = &subject1config
}
// can i use p.subject1config here and expect the memory has not been cleaned up?

最佳答案

Go 看起来很简单,但实际上它对程序员的帮助很大。

在 Go 中,所有变量都是有效的引用。编译器跟踪是否有任何内存“逃离”范围,然后自动分配在堆(共享内存池)上。如果内存没有脱离作用域,编译器会在堆栈上分配它,这会快得多。

在您的情况下,当您分配 p.subject1config = &subject1config 时,这会告诉编译器该值或内存将离开范围。编译器将从堆中分配内存,因此您可以通过引用 p.subject1config 访问外部作用域中的内存。

Go 垃圾收集器会定期检查内存块是否仍有任何引用指向它,并在没有引用时释放内存。

简而言之,您混淆了“变量”和“内存”,可能是因为 Go 会自动为您管理内存。

编辑:这个答案可能过于简单。请阅读下面的评论以获取更多信息。有关详细信息,请参阅以下链接: http://www.tapirgames.com/blog/golang-memory-management https://dougrichardson.org/2016/01/23/go-memory-allocations.html

关于go - golang变量的内存可以在其声明范围之外使用吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48911139/

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