逃逸分析

逃逸分析

例子

/*
* 闭包引用了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