如何获得golang MPG模型

时间:2017-02-14 13:51:31

标签: go runtime

我正在阅读一些golang代码的运行时(go1.6.2 linux / amd64),有人可以帮我理解run /(/)文件中getg()函数的基本机制吗?

// getg returns the pointer to the current g.
// The compiler rewrites calls to this function into instructions
// that fetch the g directly (from TLS or from the dedicated register).
func getg() *g

getg()函数如何在这里运行?这个功能的主体是什么?

2 个答案:

答案 0 :(得分:4)

请参阅Function signature with no function body以及Function Declarations的规范。

runtime.getg的情况下,代码由编译器直接发出。

答案 1 :(得分:1)

它没有被执行 - 完全是因为,如评论中所述

  

编译器将对此函数的调用重写为指令   直接获取g(来自TLS或专用寄存器)。

您可以通过类似

之类的方式获得自己
grep -rFw getg /usr/share/go-1.7/src/

编译器看到对runtime.getg()的调用时发出的代码 是依赖于体系结构的,位于文件

{src}/src/cmd/compile/internal/{arch}/ggen.go

(对于Go 1.7) - 其中{src}是Go代码的源目录 {arch}是一个特定于体系结构的目录。

amd64说,它是{src}/cmd/compile/internal/amd64/ggen.go