golang 编程笔记

【golang】变量的stack/heap分配与逃逸分析不解之情

2020-04-15  本文已影响0人  dongzd

堆栈定义

golang 参数传递重点

使用引用传递,因为复制的是一份地址,减少大的结构体传递的内存占用。但因为存放在heap上需要垃圾回收掉,运行速度要比值传递慢。所以出来共享传递参数外,尽量值传递

golang 变量函数中分配位置

go语言编译器会自动决定把一个变量放在栈还是放在堆,编译器会做逃逸分析(escape analysis),当发现变量的作用域没有跑出函数范围,就可以在栈上,反之则必须分配在堆。

在c/c++,一般通过new(动态申请)出来的变量,都会存放在heap上,而对于golang则是:

分配到堆与分配到栈上性能差异

逃逸分析作用

做逃逸分析为了尽量把不需要分配到堆上的变量,分配到栈上,堆上变量少了,减轻内存分配开销,减少gc压力,提高运行性能

上一篇下一篇

猜你喜欢

热点阅读