【发布时间】:2018-04-05 03:06:59
【问题描述】:
William Kennedy(go in action 的作者)说过,在 go 中,有两种语义。存储在堆栈上的值语义意味着当我们跨越这些程序边界时,我们正在制作一个值的副本。存储在堆上的指针语义意味着我们在跨越程序边界时共享值。垃圾收集器有时会启动以回收堆上未使用的内存。我想知道为什么指针语义的值存储在堆上。你能解释一下吗?
【问题讨论】:
-
这不是对 Go 如何选择存储内容的准确描述。
-
所有指针都指向堆,因为指向栈的指针用处不大。每次进入和退出函数时堆栈都会更改。指针值不一定存储在堆上,也不能保证所有非指针值都分配在堆栈上。
标签: go garbage-collection