同一台机器
go:
```go
package main
import "fmt"
func main() {
var a int32
var b int32
for a=0;a<100000000;a++ {
for b=0;b<1000;b++{
}
}
fmt.Println("OK")
}
```
```bash
[root@centoss8 test1]# time ./test
OK
real 0m35.566s
user 0m34.522s
sys 0m0.025s
```
c:
```c
int main()
{
int a,b;
for(a=0; a<100000000; a++)
for(b=0; b<1000; b++){
}
printf("OK");
}
```
```bash
[root@centoss8 ctest]# time ./test1
OK
real 3m30.096s
user 3m23.612s
sys 0m0.112s
```
go build -gcflags "-N -l" test.go
你用这种方式编译出来结果就差不多了。
<br/>
<br/>
如果你学过汇编,可以查看这几个编译结果的汇编代码。<br/>
1,golang开优化:go build -gcflags "-S" test.go<br/>
2,golang关优化:go build -gcflags "-S -N -l" test.go<br/>
3,c不开任何优化:gcc -S test.c<br/>
本质就是编译结果的优化程度不同而已,默认情况下的编译结果效果不好,JLT+JMP混合使用,其实只需要一个就好,编译结果的代码量又多又浪费。<br/><br/>
而且其实你的代码也证明了golang对于编译优化做的还是很基础,毕竟gcc只要一开优化,就会发现你的是无效代码,直接干掉了。<br/>
#1