Go 为什么要在堆上存储指针语义的值?

Go 为什么要在堆上存储指针语义的值?,go,garbage-collection,Go,Garbage Collection,《围棋行动》的威廉·肯尼德亚乌瑟说,围棋有两种语义。存储在堆栈上的值语义意味着,当我们跨越这些程序边界时,我们正在复制值。指针语义存储在堆上,意味着我们在跨越程序边界时共享值。垃圾收集器有时会启动以回收堆上未使用的内存。我想知道为什么指针语义的值存储在堆上。您能解释一下吗?任何时候在函数堆栈框架范围之外共享一个值,它都会被放置或分配到堆上。逃逸分析算法的任务是发现这些情况并在程序中保持一定程度的完整性。诚信在于确保对任何价值的访问始终准确、一致和高效 参考:这不是关于Go如何选择存储位置的准确描

《围棋行动》的威廉·肯尼德亚乌瑟说,围棋有两种语义。存储在堆栈上的值语义意味着,当我们跨越这些程序边界时,我们正在复制值。指针语义存储在堆上,意味着我们在跨越程序边界时共享值。垃圾收集器有时会启动以回收堆上未使用的内存。我想知道为什么指针语义的值存储在堆上。您能解释一下吗?

任何时候在函数堆栈框架范围之外共享一个值,它都会被放置或分配到堆上。逃逸分析算法的任务是发现这些情况并在程序中保持一定程度的完整性。诚信在于确保对任何价值的访问始终准确、一致和高效


参考:

这不是关于Go如何选择存储位置的准确描述。所有指针都指向堆,因为指向堆栈的指针不是很长。每次输入和退出函数时,堆栈都会更改。指针值不一定存储在堆上,也不能保证所有非指针值都在堆栈上分配。