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-11-15SendGrid 的 Go 客户端库怎么实现同时向多个邮箱发送邮件?-icode9专业技术文章分享
- 2024-11-15SendGrid 的 Go 客户端库怎么设置header 和 标签tag 呢?-icode9专业技术文章分享
- 2024-11-12Cargo deny安装指路
- 2024-11-02MongoDB项目实战:从入门到初级应用
- 2024-11-01随时随地一键转录,Google Cloud 新模型 Chirp 2 让语音识别更上一层楼
- 2024-10-25Google Cloud动手实验详解:如何在Cloud Run上开发无服务器应用
- 2024-10-24AI ?先驱齐聚 BAAI 2024,发布大规模语言、多模态、具身、生物计算以及 FlagOpen 2.0 等 AI 模型创新成果。
- 2024-10-20goland工具下,如修改一个项目的标准库SDK的版本-icode9专业技术文章分享
- 2024-10-17Go学习:初学者的简单教程
- 2024-10-17Go学习:新手入门完全指南