当前位置: 首页 > article >正文

GO——内存逃逸分析

一、可能导致逃逸的5中情况

package mainimport "fmt"func main() {f1()f2()f3()f4()f5()
}type animal interface {run()
}type dog struct{}func (d *dog) run() {fmt.Println("狗在跑")
}// 指针、map、切片为返回值的会发生内存逃逸
func f1() (*int, map[int]int, []int) {i := 1list := []int{1, 2, 3}m := map[int]int{1: 1, 2: 2, 3: 3}return &i, m, list
}// 向chan中发送指针的数据时,会发生逃逸
func f2() {i := 2ch := make(chan *int, 2)ch <- &i<-ch
}// 闭包引用外部变量时,会发生逃逸
func f3() func() {i := 3return func() {fmt.Println(i)}
}// 在map、切片中包含指针的值时,会发生逃逸
func f4() {i := 1list := make([]*int, 2)list[0] = &i
}// interface类型多态的应用,可能会导致逃逸
// 由于接口类型可以持有任意实现了该接口的类型,编译器在编译时无法确定具体的动态类型
// 因此,为了保证程序的正确性,在运行时需要将接口对象分配到堆上
func f5() {var a animal = &dog{}a.run()var b animalb = &dog{}b.run()
}

二、对逃逸进行分析

go build -gcflags -m ./main.go 

在这里插入图片描述

http://www.lryc.cn/news/2395438.html

相关文章:

  • MinVerse 3D触觉鼠标的技术原理与创新解析
  • Spring Boot整活指南:从Helo World到“真香”定律
  • Python-Selenium报错截图
  • 数论——质数和合数及求质数
  • nc 命令示例
  • 乾元通渠道商中标青海省自然灾害应急能力提升工程基层防灾项目
  • Ubuntu取消开机用户自动登录
  • 用 Spring Boot 静态资源映射 vs 用 Nginx 提供静态文件服务总结
  • openssl-aes-ctr使用openmp加速
  • PHP+MySQL开发语言 在线下单订水送水小程序源码及搭建指南
  • 计算机网络第1章(上):网络组成与三种交换方式全解析
  • Android studio进阶开发(七)---做一个完整的登录系统(前后端连接)
  • 计算机网络第1章(下):网络性能指标与分层模型全面解析
  • 恶意软件清理工具,让Mac电脑安全更简单
  • HackMyVM-Jabita
  • 112 Gbps 及以上串行链路的有效链路均衡
  • Mac 版不能连接华为 GaussDB 吗?我看 Windows 版可以连接?
  • Python-13(永久存储)
  • 《关于有序推动绿电直连发展有关事项的通知》核心内容
  • 数据结构-排序(1)
  • 记录一次session安装应用recyclerview更新数据的bug
  • 大数据-274 Spark MLib - 基础介绍 机器学习算法 剪枝 后剪枝 ID3 C4.5 CART
  • 力扣面试150题--二叉树的锯齿形层序遍历
  • 如何在 CentOS / RHEL 上修改 MySQL 默认数据目录 ?
  • 网页前端开发(基础进阶2)
  • 简历制作要精而不简
  • SPA-RL:通过Stepwise Progress Attribution训练LLM智能体
  • 【深度学习】9. CNN性能提升-轻量化模型专辑:SqueezeNet / MobileNet / ShuffleNet / EfficientNet
  • Relational Algebra(数据库关系代数)
  • 【C/C++】面试常考题目