GopherCon SG 2019 "Understanding Allocations" 学习笔记
2022/4/3 6:20:17
本文主要是介绍GopherCon SG 2019 "Understanding Allocations" 学习笔记,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
本篇是根据 GopherCon SG 2019 “Understanding Allocations” 演讲的学习笔记。
Understanding Allocations: the Stack and the Heap - GopherCon SG 2019 - YouTube
理解分配:栈和堆
在你的程序中有两种内存,栈内存和堆内存。
在 go 中,每个 go 程都会有一个栈空间,整个程序有一个堆空间。
如何知道变量是在栈还是堆上
负责堆垃圾回收的 GC 会导致整个程序的延迟,而不仅仅是创建垃圾的部分。你可能会担心你放置了多少垃圾。
什么时候需要优化
要有 benchmarks 基准来证明你的程序不够快(有大量的堆内存分配),够快就不用多此一举了。
你要先确保程序正确性(业务处理),而不是先看重性能。
普通类型参数传递
执行至第5行
函数和变量同时被挤压入栈,一个函数为一个堆栈帧。
执行完成后,你会发现黑线(只是用于区分)向上移,上方内容为有效内容,下方内容为无效内容
执行至第6行
go 声明了新的内存部分,我们有了新的堆栈帧用于打印行。黑线下移。
通俗的来讲,栈空间会进行自我清理,任何变量都会被清理干净,空间会被重复使用。
指针类型参数传递
执行至第4行
执行至第5行进入inc函数
inc函数执行完
执行 Println
总结
虽然使用了指针,但这种情况下它能够留在堆栈上,共享向下时,通常留在栈空间上。
函数返回指针
执行至第4行,进入answer函数前
进入函数
执行 Println
这破坏了原有的值
sharing up typically escapes to the heat
Escape Analysis
这篇关于GopherCon SG 2019 "Understanding Allocations" 学习笔记的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-24MongoDB资料:新手入门完全指南
- 2024-12-20go-zero 框架的 RPC 服务 启动start和停止 底层是怎么实现的?-icode9专业技术文章分享
- 2024-12-19Go-Zero 框架的 RPC 服务启动和停止的基本机制和过程是怎么实现的?-icode9专业技术文章分享
- 2024-12-18怎么在golang中使用gRPC测试mock数据?-icode9专业技术文章分享
- 2024-12-15掌握PageRank算法核心!你离Google优化高手只差一步!
- 2024-12-15GORM 中的标签 gorm:"index"是什么?-icode9专业技术文章分享
- 2024-12-11怎么在 Go 语言中获取 Open vSwitch (OVS) 的桥接信息(Bridge)?-icode9专业技术文章分享
- 2024-12-11怎么用Go 语言的库来与 Open vSwitch 进行交互?-icode9专业技术文章分享
- 2024-12-11怎么在 go-zero 项目中发送阿里云短信?-icode9专业技术文章分享
- 2024-12-11怎么使用阿里云 Go SDK (alibaba-cloud-sdk-go) 发送短信?-icode9专业技术文章分享