1. 首页
  2. 主题
  3. Go语言

为什么差别这么大???

oract · · 3965 次点击
同一台机器 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 &#34;-N -l&#34; test.go 你用这种方式编译出来结果就差不多了。 &lt;br/&gt; &lt;br/&gt; 如果你学过汇编,可以查看这几个编译结果的汇编代码。&lt;br/&gt; 1,golang开优化:go build -gcflags &#34;-S&#34; test.go&lt;br/&gt; 2,golang关优化:go build -gcflags &#34;-S -N -l&#34; test.go&lt;br/&gt; 3,c不开任何优化:gcc -S test.c&lt;br/&gt; 本质就是编译结果的优化程度不同而已,默认情况下的编译结果效果不好,JLT+JMP混合使用,其实只需要一个就好,编译结果的代码量又多又浪费。&lt;br/&gt;&lt;br/&gt; 而且其实你的代码也证明了golang对于编译优化做的还是很基础,毕竟gcc只要一开优化,就会发现你的是无效代码,直接干掉了。&lt;br/&gt;
#1

用户登录

没有账号?注册

今日阅读排行

    加载中

一周阅读排行

    加载中