Go基础:逃逸分析

1.变量逃逸的类型

  • 变量较大(栈空间不足)
  • 变量大小不确定(如 slice 长度或容量不定)
  • 返回地址(指针逃逸)
  • 返回引用(引用变量的底层是指针)
  • 返回值类型不确定(不能确定大小,如interface等动态数据类型)
  • 闭包
  • 其他

2.逃逸分析

逃逸分析,是一种可以有效减少程序中同步负载和内存堆分配压力的跨函数全局数据流分析算法。通过逃逸分析,编译器能够分析出一个新的对象的引用的使用范围从而决定是否要将这个对象分配到堆上。 逃逸分析(Escape Analysis)算是目前比较前沿的优化技术了。 

3.逃逸分析原则

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

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

  • 如果栈上放不开,则必定放到堆上

#逃逸分析常用命令
go build -gcflags=-m

一般情况下,不会逃逸的对象所占空间比较大,如果能使用栈上的空间,那么大量的对象将随方法的结束而销毁,减轻了GC压力 

 参考资料:Golang——变量逃逸_多喝氧烷_的博客-CSDN博客_golang 变量逃逸

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白木Channel

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值