[译] Go语言inline内联的策略与限制
[译] Go 语言 inline 内联的策略与限制 Go: Inlining Strategy & Limitation Visualizing memory management in Golang Understanding Allocations in Go package main import "fmt" func main() { n := []float32{120.4, -46.7, 32.50, 34.65, -67.45} fmt.Printf("The total is %.02f\n", sum(n)) } func sum(s []float32) float32 { var t float32 for _, v := range s { if t < 0 { t = add(t, v) } else { t = sub(t, v) } } return t } func add(a, b float32) float32 { return a + b } func sub(a, b float32) float32 { return a - b } 使用参数-gflags="-m"运行,可显示被内联的函数
./op.go:3:6: can inline add ./op.go:7:6: can inline sub ./main.go:16:11: inlining call to sub ./main.go:14:11: inlining call to add ./main.go:7:12: inlining call to fmt.Printf 可以看到 add 方法被内联了。但是,为什么 sum 方法没有被内联呢?使用运行参数-gflags="-m -m"可以看到原因: