Go 中的内联:策略和因素
Go 动态确定哪些函数适合内联,从而提供诸如提高性能等优势。虽然不支持显式声明内联,但编译器的逻辑会考虑内联的某些因素。
候选内联函数
为了提高内联的可能性,应满足以下条件考虑到:
-
小函数大小:代码行数较少的函数更有可能被内联。
-
调用频率高:程序中频繁调用的函数是内联的良好候选者。
-
纯函数:没有副作用的函数(例如,不改变数据或使系统调用)有利于内联。
-
无递归:递归函数无法内联。
-
没有从外部捕获的变量:依赖于的函数在其封闭范围内定义的变量不能
影响编译器的决策
虽然通常不建议显式控制内联,但出于性能考虑可能需要这样做。在这些情况下,将目标函数与其调用者放在同一文件中可以增加内联的可能性。
其他资源
- 转到有关内联的编译器文档:[$GOROOT/src/cmd/compile/internal/inline/inl.go](https://go.googlesource.com/go/ /master/src/cmd/compile/internal/inline/inl.go)
- 用于控制攻击性的调试标志:-l [level]
- Dave Cheney 关于 Go 性能的博客文章:[五那些让 Go 成为可能的东西fast](https://dave.cheney.net/2014/06/07/ Five-things-that-make-go-fast)
- 内联改进的讨论:[cmd/compile:提高内联成本型号 #17566](https://go-review.googlesource.com/c/go/ /17566)
以上是Go 的编译器如何决定何时内联函数?的详细内容。更多信息请关注PHP中文网其他相关文章!