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
标签:函数,Understanding,2019,内存,Allocations,go,执行,GopherCon 来源: https://www.cnblogs.com/linxiaoxu/p/16095012.html