golang 的内存逃逸分析

本文探讨了Go语言中内存分配的逃逸分析,如何通过`gobuild`和`gotool`工具理解变量逃逸情况。逃逸分析有助于提升性能,避免GC压力,将不逃逸的对象分配在栈上,从而优化栈内存使用和同步锁定。此外,文章还涉及了变量存储位置(栈与堆)、内存对齐和`unsafe`包的初步理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.golang 的内存分配逃逸 于堆和栈

查看是否逃逸:

go build -gcflags=-m -l

go tool compile --help:查看参数
-m: 打印优化决策
-l:不让编译时自动内连函数

  • 逃逸分析的用处(为了性能)
    最大的好处应该是减少gc的压力,不逃逸的对象分配在栈上,当函数返回时就回收了资源,不需要gc标记清除。
    因为逃逸分析完后可以确定哪些变量可以分配在栈上,栈的分配比堆快,性能好
    同步消除,如果你定义的对象的方法上有同步锁,但在运行时,却只有一个线程在访问,此时逃逸分析后的机器码,会去掉同步锁运行。
  • go消除了堆和栈的区别
    go在一定程度消除了堆和栈的区别,因为go在编译的时候进行逃逸分析,来决定一个对象放栈上还是放堆上,不逃逸的对象放栈上,可能逃逸的放堆上。

对于Go程序员来说,编译器的这些逃逸分析规则不需要掌握

2.Golang之变量去哪儿?

3.Golang中的内存对齐和unsafe初探

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值