猿问

golang源代码中的g结构定义在哪里?

在 golang 源代码中,有一些代码如下:

MOVL    (g_sched+gobuf_sp)(SI), SP  // sp = m->g0->sched.sp

runtime/stubs.go我发现

func getg() *g

但我找不到getg函数或g结构,它在哪里?


MM们
浏览 146回答 1
1回答

大话西游666

结构在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" { ...
随时随地看视频慕课网APP

相关分类

Go
我要回答