我一直在嘗試使用gc和gccgo,並且遇到一些奇怪的行爲。爲什麼使用gccgo構建的二進制文件更小(其他區別?)
使用program我曾經寫過測試一些定理,我得到了這些結果:(我刪除了readablitity不必要的信息)
$ time go build -compiler gc -o checkprog_gc checkprog.go (x 3)
go build <...> 0.13s user 0.02s system 100% cpu 0.149 total
go build <...> 0.13s user 0.01s system 99% cpu 0.148 total
go build <...> 0.14s user 0.03s system 100% cpu 0.162 total
--> average: 0.13s user 0.02s system 100% cpu 0.153 total
$ time go build -compiler gccgo -o checkprog_gccgo checkprog.go (x 3)
go build <...> 0.10s user 0.03s system 96% cpu 0.135 total
go build <...> 0.12s user 0.01s system 96% cpu 0.131 total
go build <...> 0.10s user 0.01s system 92% cpu 0.123 total
--> average: 0.11s user 0.02s system 95% cpu 0.130 total
$ strip -s -o checkprog_gc_stripped checkprog_gc
$ strip -s -o checkprog_gccgo_stripped checkprog_gccgo
$ ls -l
1834504 checkprog_gc*
1336992 checkprog_gc_stripped*
35072 checkprog_gccgo*
24192 checkprog_gccgo_stripped*
$ time ./checkprog_gc
./checkprog_gc 6.68s user 0.01s system 100% cpu 6.674 total
./checkprog_gc 6.75s user 0.01s system 100% cpu 6.741 total
./checkprog_gc 6.66s user 0.00s system 100% cpu 6.643 total
--> average: 6.70s user 0.01s system 100% cpu 6.686 total
$ time ./checkprog_gccgo
./checkprog_gccgo 10.95s user 0.02s system 100% cpu 10.949 total
./checkprog_gccgo 10.98s user 0.01s system 100% cpu 10.964 total
./checkprog_gccgo 10.94s user 0.01s system 100% cpu 10.929 total
--> average 10.96s user 0.01s system 100% cpu 10.947 total
我可以看到下面的模式:內置
- 二進制與
gccgo
的大小從根本上小(剝離無助於改變這種差異)與gc
內置 - 二進制文件可以更快地執行
- 它需要更多的時間來建立與
gccgo
比gc
我還測試了一些其他的圍棋程序(而不是廣泛地),他們都表現出相同的行爲。
這似乎矛盾的時候,this answer狀態:
簡而言之:gccgo:更多的優化,更多的處理器。
我認爲更多的優化意味着更快的二進制文件,而需要更多的時間來編譯......
是什麼原因這三種模式?
很可能是因爲它們鏈接到'libgo'。 'ldd'或'readelf'會告訴你(如果你在Linux系統上)。 – kostix 2014-11-21 18:06:56