golang 内存逃逸

本文探讨了Golang中的内存逃逸现象,说明了堆和栈的区别,以及Go语言如何尽量在栈上分配资源。内存逃逸发生在局部变量作为函数返回值、栈空间不足、interface参数、slice和map中指针元素以及闭包等场景。通过编译时分析确定内存分配位置,以减少GC压力。
摘要由CSDN通过智能技术生成

参考:Golang内存分配逃逸分析 - jimshi - 博客园

GO语言变量逃逸分析 - Go语言中文网 - Golang中文社区

总结下,就是:

1. 堆和栈

之前写c++的时候,栈是各种局部变量,函数结束就自动释放;堆就是使用new和malloc分配的,需要rd去关注啥时候分配,啥时候释放。在栈上分配内存比较快,而且回收也快,在堆上分配就耗费的资源比较多。而且,在栈上面分配的,函数结束后就自动回收了,只有全局的栈上的变量和堆上的变量,才需要GC回收,减少堆上分配内存的同时,也减轻了gc的压力。

所以go就希望,能尽可能多的在栈上面分配资源。那go是怎么做的呢?

func F() {
	temp := make([]int, 0, 20)
	...
}

就比如上面这种,虽然是手动执行了make来分配内存,正常来说应该在堆上,但是实际上是在栈上面。但是也不是所有的局部变量都能分配到栈上。

func F() []int{
	a := make([]int, 0, 20)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值