I experimented with gc and gccgo, and I came across some odd behavior.
Using the program Once I wrote to test some theorem, I got the following results: (I deleted unnecessary information for readability)
$ 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
I see the following patterns:
- Binaries built with
gccgo are much smaller (and deleting does not help change this difference). - Binaries created with
gc run faster - Building with
gccgo takes longer than using gc
I also tested some other go programs (although not as widely), and they all exhibit the same behavior.
This seems to contradict what this answer reads:
In short: gccgo: more optimization, more processors.
I would think that more optimization means faster binaries, while it takes more time to compile ...
What is the reason for these three patterns?
source share