Go 中函数内联的编译器逻辑
在 Go 中,与 C 不同,编译器自动确定哪些函数适合内联。尽管有一个调试选项可以观察潜在的内联,但有关 Go 编译器使用的确切标准的文档有限。
内联优化
考虑需要执行重复对数据集进行循环,让我们检查下面的代码:
func Encrypt(password []byte) ([]byte, error) { return bcrypt.GenerateFromPassword(password, 13) } for id, data := range someDataSet { newPassword, _ := Encrypt([]byte("generatedSomething")) data["password"] = newPassword someSaveCall(id, data) }
注意事项内联
要潜在地限定编译器内联的 Encrypt 函数,请考虑以下事项:
编译器逻辑
Go 编译器执行两遍内联:
The可以使用“l”调试标志来调整内联的积极性。
建议
除非性能成为问题,否则通常建议依赖编译器的默认内联行为。但是,如果需要显着提高性能,请考虑手动内联频繁调用的小型函数,以最大限度地减少开销。
以上是Go编译器如何决定何时内联函数?的详细内容。更多信息请关注PHP中文网其他相关文章!