8.4.2 内联判断
type hairyVisitor struct {
// 内联“预算”,起始值为 80, 由常量 inlineMaxBudget 定义,函数体内各种操作都会有对应的“代价(cost)”,总体“代价”超过“预算”的话,那么该函数就会由于太复杂而无法内联
budget int32
// 保存不能内联的理由
reason string
// 方法调用的开销,默认为 57, 由常量 inlineExtraCallCost 定义
extraCallCost int32
// 用来记录当前函数的局部变量,函数内联时需要使用
usedLocals ir.NameSet
// 遍历函数并进行复杂度计算,实际为方法 hairyVisitor.doNode()
do func(ir.Node) bool
}func B() {
println("B")
println("B")
}
// go:noinline
func C() {
println("C")
}
func A() {
println("A")
C()
}最后更新于