defer 实现原理
defer 实现原理
type _defer struct {
sp uintptr //函数栈指针
pc uintptr //程序计数器
fn *funcval //函数地址
link *_defer //指向自身结构的指针,用于链接多个defer
}结构是单链表构成的一个函数链,每次声明一个defer时就将defer插入到单链表表头
在编译在阶段,声明defer处插入了函数deferproc(),在函数return前插入了函数deferreturn()
return不是原子操作,执行过程是: 保存返回值(若有)–>执行defer(若有)–>执行ret跳转