逃逸分析
例子
/*
* 闭包引用了x变量, a,b可以看做2个不同的实例,实例之间互不影响,实例内部,x变量是同一个地址,因此具有"累加效应"
*/
package main
import "fmt"
func main() {
var a = acc()
fmt.Printf("%d\n", a(1))
fmt.Printf("%d\n", a(10))
fmt.Printf("%d\n", a(100))
fmt.Println("-------------------")
var b = acc()
fmt.Printf("%d\n", b(1))
fmt.Printf("%d\n", b(10))
fmt.Printf("%d\n", b(100))
}
func acc() func(int) int {
var x int
return func(delta int) int {
fmt.Printf("%+v, %+v", &x, x)
x += delta
return x
}
}
结果:
0xc000016070, 01
0xc000016070, 111
0xc000016070, 11111
-------------------
0xc0000160b0, 01
0xc0000160b0, 111
0xc0000160b0, 11111