为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
MM们 2022-03-07 22:49:38
在 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" { ...


查看完整回答
反对 回复 2022-03-07
  • 1 回答
  • 0 关注
  • 145 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号