【问题标题】:Why dose go store value of pointer semantics on the heap?为什么要在堆上存储指针语义的值?
【发布时间】:2018-04-05 03:06:59
【问题描述】:

William Kennedy(go in action 的作者)说过,在 go 中,有两种语义。存储在堆栈上的值语义意味着当我们跨越这些程序边界时,我们正在制作一个值的副本。存储在堆上的指针语义意味着我们在跨越程序边界时共享值。垃圾收集器有时会启动以回收堆上未使用的内存。我想知道为什么指针语义的值存储在堆上。你能解释一下吗?

【问题讨论】:

  • 这不是对 Go 如何选择存储内容的准确描述。
  • 所有指针都指向堆,因为指向栈的指针用处不大。每次进入和退出函数时堆栈都会更改。指针值不一定存储在堆上,也不能保证所有非指针值都分配在堆栈上。

标签: go garbage-collection


【解决方案1】:

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

参考:https://www.ardanlabs.com/blog/2017/05/language-mechanics-on-escape-analysis.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-15
    • 2012-01-31
    • 2013-04-11
    相关资源
    最近更新 更多