golang如何避免内存逃逸 golang内存逃逸会导致什么问题

主机教程 建站分享 2年前 (2022-09-16) 200次浏览

文章摘要:golang如何避免内存逃逸 golang内存逃逸会导致什么问题

golang中避免内存逃逸的方法有:1.尽量避免使用接口类型;2.避免使用变量指针作为参数;3.设定slice […]

golang中避免内存逃逸的方法有:1.尽量避免使用接口类型;2.避免使用变量指针作为参数;3.设定slice长度,避免容量超出;4.减少外部引用, 如指针;

出现内存逃逸的情况有:

1.发送指针或带有指针的值到channel,因为编译时候无法知道那个goroutine会在channel接受数据,编译器无法知道什么时候释放。

2.在一个切片上存储指针或带指针的值。比如[]*string,导致切片内容逃逸,其引用值一直在堆上。

3.切片的append导致超出容量,切片重新分配地址,切片背后的存储基于运行时的数据进行扩充,就会在堆上分配。

4.调用接口类型时,接口类型的方法调用是动态调度,实际使用的具体实现只能在运行时确定,如一个接口类型为io.Reader的变量r,对r.Read(b)的调用将导致r的值和字节片b的后续转义并因此分配到堆上。

5.在方法内把局部变量指针返回,被外部引用,其生命周期大于栈,导致内存溢出。


声明:
若非注明,本站文章源于互联网收集整理和网友分享发布,如有侵权,请联系站长处理。
文章名称:golang如何避免内存逃逸 golang内存逃逸会导致什么问题
文章链接:http://www.7966.org/post/11629.html
转载请注明出处

喜欢 (0)