2017-02-14 4 views
1

Я читаю некоторую рабочую среду кода golang (go1.6.2 linux/amd64), Может кто-нибудь помочь мне понять лежащий в основе механизм getg() в runtime/stubs.go файл?Как получить g в golang MPG model

// 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()? Каково тело этой функции?

+0

Можете ли вы предоставить ссылку на код, который вы просматриваете? Возможно, это Кго? – Flimzy

ответ

3

См. Function signature with no function body, а также спецификация для Function Declarations.

В случае runtime.getg код непосредственно испускается компилятором.

+0

Спасибо за ваш ответ, это мне очень помогает! Но как получить более подробную информацию о выполнении этой функции, когда она обрабатывается компилятором? – wangzhe

1

Это не выполняется — именно потому, что, как указано в комментарии

Компилятор переписывает вызовы этой функции в инструкции , что принести g непосредственно (с TLS или из выделенного регистра).

Как вы можете получить себя через что-то вроде

grep -rFw getg /usr/share/go-1.7/src/ 

код, который излучается, когда компилятор видит вызов runtime.getg() зависит от архитектуры и находится в файлах

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

(for Go 1.7) — где {src} является исходным каталогом вашего кода Go и {arch} - это каталог, ориентированный на архитектуру.

Скажите, для amd64, это {src}/cmd/compile/internal/amd64/ggen.go.

+0

Спасибо за ваш ответ, это очень помогает мне! – wangzhe

Смежные вопросы