首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么是Go cmd选项‘Go标志’所有可能值

什么是Go cmd选项‘Go标志’所有可能值
EN

Stack Overflow用户
提问于 2020-06-26 07:12:39
回答 2查看 12.9K关注 0票数 13

我正在学习如何通过内联优化Go内存。下面的代码是我的测试代码。

我使用go build -gcflags=-m=2 main.go来获得所有的结果。我跟着戴夫·切尼的职位做这件事。

我的问题是:“gc之旗”的价值是什么?文档在哪里,我找不到谷歌的文档?

代码语言:javascript
复制
func fn1() int {
    s := 1+2
    return s
}

func fn2() string {
    a := "h"
    a += "e"
    a += "l"
    a += "l"
    a += "o"
    b := " "
    c := "w"
    c += "o"
    c += "r"
    c += "l"
    c += "d"
    d := "d"
    d += "e"
    d += "e"
    d += "e"
    d += "e"
    d += "e"
    d += "e"
    d += "e"
    d += "e"
    d += "e"
    s := a + b + c
    return s
}

func fn3() {
    p := fn1()

    s := fn2()

    println("p = " + string(p))
    println("s = " + s)
}

产出:

代码语言:javascript
复制
go build -gcflags='-m=2' main.go
# command-line-arguments
./main.go:3:6: can inline fn1 as: func() int { s := 1 + 2; return s }
./main.go:16:6: cannot inline fn2: function too complex: cost 81 exceeds budget 80
./main.go:47:6: cannot inline fn3: function too complex: cost 85 exceeds budget 80

我也试过了-gcflags=-m=3, -gcflags=-m=4, -gcflags=-m=5**的结果如下,很难理解。也许有人能帮我指明方向。**

代码语言:javascript
复制
go build -gcflags=-m=3 main.go
# command-line-arguments
./main.go:3:6: can inline fn1 as: func() int { s := 1 + 2; return s }
./main.go:8:6: cannot inline fn2: recursive
./main.go:16:6: can inline fn3 as: func() { p := fn1(); p = fn2(p); println("p = " + string(p)) }
./main.go:17:10: inlining call to fn1 func() int { s := 1 + 2; return s }
./main.go:17:10: Before inlining:
.   CALLFUNC l(17) tc(1) int
.   .   NAME-inlining.fn1 l(3) x(0) class(PFUNC) tc(1) used FUNC-@0
substituting name
.   NAME-inlining.s g(2) l(4) x(0) class(PAUTO) tc(1) used int  ->
.   NAME-inlining.s l(4) x(0) class(PAUTO) tc(1) used int
substituting name
.   NAME-inlining.s g(2) l(4) x(0) class(PAUTO) tc(1) used int  ->
.   NAME-inlining.s l(4) x(0) class(PAUTO) tc(1) used int
substituting name
.   NAME-inlining.s g(2) l(4) x(0) class(PAUTO) tc(1) used int  ->
.   NAME-inlining.s l(4) x(0) class(PAUTO) tc(1) used int
./main.go:17:10: After inlining
.   INLCALL-init
.   .   DCL l(17)
.   .   .   NAME-inlining.~r0 l(3) x(0) class(PAUTO) tc(1) assigned used int

.   .   AS l(17) tc(1)
.   .   .   NAME-inlining.~r0 l(3) x(0) class(PAUTO) tc(1) assigned used int

.   .   INLMARK l(+17) x(0)
.   INLCALL l(17) tc(1) int
.   INLCALL-rlist
.   .   NAME-inlining.~r0 l(3) x(0) class(PAUTO) tc(1) assigned used int
..... // too much
EN

回答 2

Stack Overflow用户

发布于 2020-06-26 08:07:52

-gcflags标志接受标志列表,当它被调用时应该传递给go tool compile。因此,您可以在其文件或运行命令中看到所有可能的选项:

代码语言:javascript
复制
go tool compile -help
票数 26
EN

Stack Overflow用户

发布于 2022-06-08 10:55:53

在后面添加-help:

代码语言:javascript
复制
go build -gcflags -help
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62589743

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档