Go内存逃逸

概念:从栈上逃逸到堆上的现象称为内存逃逸

逃逸机制

        1. 如果函数外部没有引用,则优先放到栈中

        2. 如果函数外部存在引用,则必定放到堆中

        3. 如果栈上放不下,则必定放到堆上

        通过编译参数-gcflag=-m可以查看编译过程中的逃逸分析

内存逃逸场景

1. 函数返回值为局部变量的指针,函数虽然退出了,但是因为指针的存在,指向的内存不能随着函数结束而回收,因此只能分配在堆上

2. 栈空间不足

3. 变量大小不确定

        编译期间无法确定slice的长度,这种情况是为了保证内存的安全,编译器也会触发逃逸,在堆上分配内存。

4. 动态类型

        动态类型就是在编译期间不能确定参数的类型,参数的长度也不确定的情况下会发生逃逸,如:空接口interface{}可以表示任意的类型,函数参数为interface{}会发生逃逸

5. 闭包引用对象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值