死码消除与调试(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
```
';