:
闭包的内容是[匿名函数的地址, 传给匿名函数的参数(不定长)...]...传递闭包给其他函数时会传递指向"闭包的内容"的指针
调用闭包时会把指向"闭包的内容"的指针放到寄存器rdx(在go内部这个指针称为"上下文")
闭包会从寄存器rdx取出参数
如果闭包修改了变量, 闭包中的参数会是指针而不是值..., 修改时会修改到原来的位置上
闭包+goroutine
细心的可能会发现在上面的例子中, 闭包的内容在栈上, 如果不是直接调用executeFn而是go executeFn呢?...在创建goroutine时, 首先会传入函数+参数的大小(上面是8+8=16), 然后传入函数+参数, 上面的参数即闭包的地址.
m0和g0
go中还有特殊的M和G, 它们是m0和g0.
m0是启动程序后的主线程...goexit, 函数运行完毕返回时将会调用goexit函数
g.sched.pc在G首次运行时会指向目标函数的第一条机器指令,
如果G被抢占或者等待资源而进入休眠, 在休眠前会保存状态到g.sched,