glang在golang源代码中定义在哪里?

时间:2016-09-07 05:02:32

标签: go

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

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

runtime/stubs.go我找到了

func getg() *g

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

1 个答案:

答案 0 :(得分:1)

结构位于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" { ...