Tony Bai · Go 语言第一课
Tony Bai
资深架构师,tonybai.com 博主
20432 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 59 讲
开篇词 (1讲)
结束语 (1讲)
Tony Bai · Go 语言第一课
15
15
1.0x
00:00/00:00
登录|注册

大咖助阵|曹春晖:聊聊 Go 语言的 GC 实现

作者注:本文只作了解,不建议作为面试题考察。
你好,我是曹春晖,是《Go 语言高级编程》的作者之一。
今天我想跟你分享一下 Go 语言内存方面的话题,聊一聊 Go 语言中的垃圾回收(GC)机制的实现,希望你能从中有所收获。

武林秘籍救不了段错误

包教包会包分配
在各种流传甚广的 C 语言葵花宝典里,一般都有这么一条神秘的规则,不能返回局部变量:
int * func(void) {
int num = 1234;
/* ... */
return #
}
duang!
当函数返回后,函数的栈帧(stack frame)就会被销毁,引用了被销毁位置的内存,轻则数据错乱,重则 segmentation fault。
可以说,即使经过了八十一难,终于成为了 C 语言绝世高手,我们还是逃不过复杂的堆上对象引用关系导致的 dangling pointer:
当 B 被 free 掉之后
你看,在这张图中,当 B 被 free 掉之后,应用程序依然可能会使用指向 B 的指针,这就是比较典型的 dangling pointer 问题,堆上的对象依赖关系可能会非常复杂。所以,我们要正确地写出 free 逻辑,还得先把对象图给画出来。
不过,依赖人去处理复杂的对象内存管理的问题是不科学、不合理的。C 和 C++ 程序员已经被折磨了数十年,我们不应该再重蹈覆辙了,于是,后来的很多编程语言就用上垃圾回收(GC)机制。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Tony Bai · Go 语言第一课》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(7)

  • 最新
  • 精选
  • Tony Bai
    曹老师把GC原理讲得好通透!👍
    7
  • 叶剑峰
    膜拜曹大
    2
  • 骨汤鸡蛋面
    大佬,go 在变量赋值时调用 write barrier,可以多补充些细节嘛?
    4
    1
  • Niku
    曹神TQL
    归属地:中国香港
  • 怎么睡才能做这种梦
    看不懂噢
    归属地:湖北
  • simple_孙
    PauseNs数组中的数字是啥意思呢
    1
  • 曹大yyds
收起评论
显示
设置
留言
7
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部