当我在谈论 Go 时,我在谈论 gc 编译器的实现。
据我所知,Go 执行逃逸分析。在 Go 代码中经常看到以下习语:
func NewFoo() *Foo
转义分析会注意到 Foo 转义了 NewFoo 并在堆上分配了 Foo。
这个函数也可以写成:
func NewFoo(f *Foo)
并且会像
var f Foo NewFoo(&f)
在这种情况下,只要 f 不在其他任何地方转义,f 就可以在堆栈上分配。
现在我的实际问题。
编译器是否有可能将每个优化foo() *Foo
为foo(f *Foo)
,甚至可能在多个级别上优化,其中每个级别都返回 Foo ?
如果不是,这种方法在什么样的情况下会失败?
先感谢您。
森栏
千万里不及你
相关分类