知道golang的内存逃逸吗?什么情况下会发生内存逃逸

1、golang的内存分配方式分为栈(stack)和堆(heap)两种;栈廉堆贵

分配到栈内存的好处:函数返回时会直接释放,不会引起垃圾回收,对性能没有影响

分配到堆内存的坏处:会引起gc垃圾回收,影响程序性能

2、其中 而发生内存逃逸是指:如果变量的内存发生逃逸,它的生命周期就是不可知的,其会被分配到堆上,而堆上分配内存不能像栈一样会自动释放,需要go本身的gc垃圾回收机制释放,会影响程序的运行性能

3、大白话就是(函数内)(局部)变量的分配从栈跑到堆上

## 网上说辞一
因为如果变量的内存发生逃逸,
它的生命周期就是不可知的,其会被分配到堆上,
而堆上分配内存不能像栈一样会自动释放,为了解放程序员双手,专注于业务的实现,
go实现了gc垃圾回收机制,但gc会影响程序运行性能,所以要尽量减少程序的gc操作

## 网上说辞二
golang程序变量会携带有一组校验数据,
用来证明它的整个生命周期是否在运行时完全可知。
如果变量通过了这些校验,
它就可以在栈上分配。
否则就说它 逃逸了,必须在堆上分配。