死码消除与调试(debug)模式

最后更新于:2022-04-02 02:36:24

[TOC] ## 死码消除概念 死码消除(dead code elimination, DCE)是一种编译器优化技术,用处是在编译阶段去掉对程序运行结果没有任何影响的代码 ## 应用 ### 使用常量提升性能 ``` // maxconst.go func max(num1, num2 int) int { if num1 > num2 { return num1 } return num2 } const a, b = 10, 20 func main() { if max(a, b) == a { fmt.Println(a) } } ``` 会被优化为 ``` func main() { if 20 == 10 { fmt.Println(a) } } ``` ### 可推断的局部变量 ``` // maxvarlocal func main() { var a, b = 10, 20 if max(a, b) == a { fmt.Println(a) } } ``` 即 a、b 作为局部变量时,编译器死码消除是生效的 ### 调试(debug)模式 ``` const debug = false func main() { if debug { log.Println("debug mode is enabled") } } ``` 如果是正常编译,常量 debug 始终等于 false,调试语句在编译过程中会被消除,不会影响最终的二进制大小,也不会对运行效率产生任何影响 ### 条件编译 debug.go ``` // +build debug package main const debug = true ``` release.go ``` // +build !debug package main const debug = false ``` 编译debug ``` $ go build -tags debug -o debug . $ ./debug 2021/01/11 00:10:40 debug mode is enabled ``` 编译 release ``` $ go build -o release . $ ./release # no output ```
';