当前位置: 首页 > 知识库问答 >
问题:

简单函数未内联

邵奇
2023-03-14

我正在使用 Prometheus 向我的 Go 程序添加指标调用。为了便于维护,我决定将所有 Prometheus 调用分离到一个单独的源文件中的简单函数调用(以防我想移动到不同的指标包)。但更重要的是,它还使编写代码的速度更快,因为 IDE 将提示标签名称作为函数调用的参数。例如像这样:

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

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

其中一些函数经常在低级循环中被调用,所以我不希望这些调用使代码太慢。我的假设是这样一行简单的代码很容易内联。但是检查(使用构建选项< code> - gcflags -m)我发现上面的单行函数没有内联(go1.12.5 windows/amd64)。有人知道为什么吗?如何解决这个问题?注意,这个函数是内联的:

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

通过进一步的实验,如果一个函数有多个对不可内联函数的调用,它似乎不会内联。(您可以对可内联函数进行大量调用,但一个函数仍然是可内联的。)

共有1个答案

梁德馨
2023-03-14

只是用以下几点发布一个答案(因为没有人这样做):

  1. 在尝试优化之前进行基准测试
  2. 看似简单的函数可能很难内联
  3. 内联正在发展,上述内容可能在未来内联
 类似资料:
  • 我正在尝试编写一个C程序,使用哈希表来存储不同的单词,我需要一些帮助。 首先,我创建一个哈希表,其大小为最接近我必须存储的单词数的素数,然后我使用一个哈希函数为每个单词找到一个地址。我从最简单的函数开始,把字母加在一起,结果有88%的碰撞。然后我开始实验这个函数,发现无论我把它改成什么,碰撞都不会低于35%。现在我在用 这只是我想出来的一个随机函数,但它给了我最好的结果--大约35%的碰撞。 在过

  • 本文向大家介绍python内置函数:lambda、map、filter简单介绍,包括了python内置函数:lambda、map、filter简单介绍的使用技巧和注意事项,需要的朋友参考一下 lambda lambda可以理解为一种小函数,但是它是一个表达式,而不是一个语句,所以在def不允许出现的地方仍然可以使用lambda函数,例如list里。但是lambda内只可以执行一个表达式。  一个l

  • 第 3 章 简单函数 目录 1. 数学函数 2. 自定义函数 3. 形参和实参 4. 全局变量、局部变量和作用域

  • 我正在尝试编写一个简单的数据库函数来从表中检索值。 MariaDB只是给出以下消息 在“开始声明标题VARCHAR DEFAULT”附近,在第2行的标题FR中选择MyTitle 我看不出有什么不对。请帮忙。 谢谢你

  • 本文向大家介绍简单谈谈PHP中strlen 函数,包括了简单谈谈PHP中strlen 函数的使用技巧和注意事项,需要的朋友参考一下 strlen函数说明。 int strlen ( string $string ) 在这篇文章,我们可以知道strlen函数是通过Zend Engine定义的。函数的定义可以在这里查看。 在这里也给出函数的源码: 该文章讲到,该函数很简单,并不需要进一步的解释。而这篇

  • 本文向大家介绍python中count函数简单用法,包括了python中count函数简单用法的使用技巧和注意事项,需要的朋友参考一下 python中count函数的用法 Python count()方法 描述 Python count() 方法用于统计字符串里某个字符出现的次数。可选参数为在字符串搜索的开始与结束位置。 count()方法语法: 参数 sub -- 搜索的子字符串 start -