【金秋打卡】第1天 Go的内存模型
2022/10/26 3:24:53
本文主要是介绍【金秋打卡】第1天 Go的内存模型,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
课程名称:深入Go底层原理,重写Redis中间件实战
课程章节:9-1,9-2
课程讲师:Moody
课程内容:
★Go协程栈的作用
协程的执行路径
go的协程是在栈中依次执行的
局部变量
go的局部变量是存在栈中的,当然如果出现变量过大,或者指针传递给其他地方,可能会造成逃逸
函数传参
go的栈在依次执行的时候,一个函数传递给下一个函数的参数是在栈内存中完成的
go使用的是参数拷贝传递(值传递)
传递结构体时:会拷贝结构体中的全部内容,所以不推荐
传递指针时:会拷贝结构体指针
函数返回值
同上,只不过相反方向
★逃逸分析
不是所有的变量都放在协程栈上
栈帧回收后,需要继续使用的变量不能被回收,会逃逸到堆上
太大的变量是放不下的,栈帧初始只有2~4k,太大的变量也是会逃逸到堆上,超过64k的变量会被直接逃逸到堆上
指针逃逸:函数返回了对象的指针,导致栈帧回收后,指针被其他函数使用
空接口:空接口往往会被用于反射,反射通常是对堆中的变量进行反射,栈内存很难反射
★栈扩容
在函数调用钱判断栈空间(morestruct)
1.13之前用的是分段栈:分段栈类似于map的溢出桶,当栈帧空间不足的时候,就开辟一个新的栈区和之前的栈帧逻辑上连在一起,好处是没有空间浪费,缺点是会在新开辟的区域和 旧区域之间来回横跳
1.13之后用的是连续栈:连续栈类似于分片,当需要扩容的时候,就直接找个新空间,新空间是旧空间的2倍,把旧数据全部迁移过来,然后舍弃旧栈区。缩容的时候,是当空间使用率不足四分之一,就缩容为原来的二分之一。连续栈的优点是:空间一直是连续的。缺点是伸缩的时候开销大。
课程收获:
通过学习,对go的内存模型有初步的认知,了解了go的内存的栈和堆其实都在系统分配的堆区上
这篇关于【金秋打卡】第1天 Go的内存模型的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 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专业技术文章分享
- 2024-12-10搭建个人博客网站之一、使用hugo创建个人博客网站