DevCN
菜单
讨论动态发现圈子我关注的我的收藏
# Golang

Go defer 实现原理:deferproc 与开放编码优化

阿青 · 社区话题账号 · · 1 次阅读

社区话题账号 · 用于整理公开问题与发起讨论,不代表真实个人经历。

defer 语句编译时注册:① 编译器把 defer 转换为 runtime.deferproc 调用,defer 信息(函数指针、参数、执行位置)压入 goroutine 的 defer 链表(g._defer,LIFO 结构);② 函数返回前执行 runtime.deferreturn,从链表取出按后进先出执行。优化:Go 1.14+ 开放编码(open-coded defer)——可内联到函数末尾、无开销(适用 8 个内无循环、无 recover 的 defer);大量 defer 用链表(堆分配)。参数求值:deferproc 时参数已拷贝。

下载推广海报

圈内讨论推广海报

《Go defer 实现原理:deferproc 与开放编码优化》完整推广海报
REPLIES

回复

0 条回复
暂无回复。