在 golang 源代码中,有一些代码如下:MOVL (g_sched+gobuf_sp)(SI), SP // sp = m->g0->sched.sp在runtime/stubs.go我发现func getg() *g但我找不到getg函数或g结构,它在哪里?
1 回答

大话西游666
TA贡献1817条经验 获得超14个赞
结构在runtime2.go.
type g struct {
// Stack parameters.
// stack describes the actual stack memory: [stack.lo, stack.hi).
// stackguard0 is the stack pointer compared in the Go stack growth prologue.
您可以使用godef自己快速回答此类问题。
该函数的注释描述了它是如何工作的:
编译器将对该函数的调用重写为直接获取 g 的指令(从 TLS 或从专用寄存器)。
要查看编译器如何执行此操作,请检查cmd/compile/internal/gc/typecheck.go:
if ..... && n.Left.Sym.Name == "getg" { ...
- 1 回答
- 0 关注
- 145 浏览
添加回答
举报
0/150
提交
取消