Go-内存逃逸
一、什么是内存逃逸?
golang在编译时,需要确定一个变量到底是在栈上分配内存,还是在堆上分配内存,不能在栈上分配的变量,就只能在堆上分配,就说这个变量内存逃逸了。
二、什么时候会内存逃逸?
引起内存逃逸的关键:编译器在编译时,无法确定变量的生命周期,只能在运行时控制。
- 函数返回了局部变量的指针
- 发送指针或者带有指针的数据进channel
- 在切片上存储指针或带有指针的值
- 切片扩容
- 调用interface的方法(fmt.println)
三、逃逸分析命令
go build -gcflags=-m main.go