威廉·肯尼迪(作为行动的作者)说,在去,有两种语义。存储在堆栈中的值语义意味着当我们跨越这些程序边界时,我们正在制作值的副本。存储在堆上的指针语义意味着当我们跨越程序边界时,我们将共享该值。垃圾收集器有时会启动以回收堆上未使用的内存。我想知道为什么指针语义的值存储在堆上。你能解释一下吗?
答案 0 :(得分:0)
任何时候在函数的堆栈框架范围之外共享一个值,它将被放置(或分配)在堆上。逃逸分析算法的工作是找到这些情况并保持程序中的完整性。诚信是确保对任何价值的访问始终准确,一致和有效。
参考:https://www.ardanlabs.com/blog/2017/05/language-mechanics-on-escape-analysis.html