雨谷の日和

過去20年で2,700を超えるアニメの第1話だけは見続けた僕のお勧めアニメがハズレなはずがない

Cの最適化の効果

JavaとCの実行比較」で、実際にCとJavaで似たような処理を実行させ、その処理時間を比較してみた。
その結果「Javaの方が速い」となったわけだが、それは本当なのだろうか。
検証してみよう。


まずは屁理屈太郎氏も指摘している、最適化の問題がある。
実は、gccコンパイル時のオプションで何処まで最適化を行うかを指定することが出来る。
前回はデフォルトの状態でコンパイルを行ったため、十分な最適化が行われていない可能性があるのだ。
まずは、そのコンパイル時の最適化オプションを用いて、結果を見てみよう。

gcc -o test.exe test.c
gcc -O0 -o test0.exe test.c
gcc -O1 -o test1.exe test.c
gcc -O2 -o test2.exe test.c
gcc -O3 -o test3.exe test.c

上記の「-O0」〜「-O3」が最適化の深さを指定するオプションである。
「-O0」は最適化を全くしない。「-O3」はかなり深い最適化を行う。
そうして出来たものを実行してみた結果が、以下である。

20:10:00
20:10:16
20:10:32
20:10:37
20:10:41
20:10:46

デフォルトと最適化なしは約16秒、最適化有りはいずれも約5秒という結果となった。約3倍もの性能向上である。
最適化を行った場合のCのものの実行性能は、Javaよりも速い。