gpt4 book ai didi

go - 不内联简单函数

转载 作者:行者123 更新时间:2023-12-01 22:27:59 25 4
gpt4 key购买 nike

我正在使用Prometheus向我的Go程序添加指标调用。我决定将所有Prometheus调用与简单函数调用分开在一个单独的源文件中,以实现可维护性(以防我想移至其他度量标准包)。但是更重要的是,这也使编写代码更快,因为IDE会提示以标签名称作为函数调用的参数。例如这样的事情:

var requestCounter = promauto.NewCounterVec(prometheus.CounterOpts{}, []string{"name"})

func incrementRequestCounter(label1, label2 string) {
requestCounter.WithLabelValues(label1, label2).Inc()
}

其中一些函数通常在低级循环中调用,因此我不希望这些调用使代码减慢太多。我的假设是,如此简单的代码行将易于内联。但是检查(使用构建选项 --gcflags -m)后,我发现上述单行函数未内联(go1.12.5 windows / amd64)。有人知道为什么吗?以及如何解决这个问题?请注意,此函数是内联的:
func incrementRequestCounter(label1, label2 string) {
requestCounter.WithLabelValues(label1, label2)
}

经过进一步的试验,如果一个函数对 可内联函数的调用不止一个,则似乎不会内联。 (您可以多次调用可内联函数,并且该函数仍将内联。)

最佳答案

只需发布以下几点的答案(因为没有其他人有):


  • 在尝试优化之前进行基准测试。
  • 一个看似简单的函数可能很难内联
  • 内联正在发展,将来可能会内联以上内容
  • 关于go - 不内联简单函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58640486/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com