GCCとVC++の最適化について
公開日| 2009年09月22日 | コメントはまだありません。
カテゴリー:C/C++ |
概要 :
よくWindowsでは、GCCとVC++のコンパイラが比較されます。
個人的な見解では、いずれも優れたコンパイラであり、どちらを用いるかは、開発者の好みのような気がしています。
今回は、あえて、この疑問について、ひとつの参考になるように最適化を施した実行プログラムが、どれくらい早いかを 簡単なサンプルプログラムで確認してみました。
ここで記載していることは、実際に筆者のPC(WindowsXP)で実行した結果を記載しております。 しかしながら、サンプルは1例に過ぎないことを、あらかじめご了解ください。
よくWindowsでは、GCCとVC++のコンパイラが比較されます。
個人的な見解では、いずれも優れたコンパイラであり、どちらを用いるかは、開発者の好みのような気がしています。
今回は、あえて、この疑問について、ひとつの参考になるように最適化を施した実行プログラムが、どれくらい早いかを 簡単なサンプルプログラムで確認してみました。
ここで記載していることは、実際に筆者のPC(WindowsXP)で実行した結果を記載しております。 しかしながら、サンプルは1例に過ぎないことを、あらかじめご了解ください。
サンプルソースコード
実証実験を行う前に、そテストに用いるサンプルプログラムを簡単に作成しました。1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | #include <iostream> #include <ctime> using namespace std; int main(int argc, char *argv[]) { int ni; int nmax = 10000000; double d1,d2,d3; { // timer std::clock_t _start_time = std::clock(); d2=4;d3=1.001; for(ni=0;ni<nmax;ni++){ d1=d2*d3; d2=d1; if((ni%10)==0){ d1=d2/1.01001; d2=d1; } } d1 = (double(std::clock() - _start_time) / (double)CLOCKS_PER_SEC); cout << d1 << "(s)" << endl; cout << "(val)" << d2 << endl; cout << "(count)" << ni << endl; } return 0; } |
これは、非常に単純なサンプルです。乗算、剰余、除算の計算処理を10,000,000回繰り返しているだけです。
ただし、この最終的な答えが、アンダーフロー、オーバーフローしないようにしています。
この演算結果は、5.04832e+015となります。
これを、GCC 3.4.5 ,GCC 4.4.0 , VC++7.1(2003),VC++9(2008) でコンパイルします。
ランタイムライブラリは、DLLのマルチスレッド対応とし、最適化は、O2のオプションを設定しました。
結果
| コンパイラ | 処理時間 (秒) |
| GCC 3.4.5 | 0.171 |
| GCC 4.4.0 | 0.234 |
| VC7.1 | 0.171 |
| VC9 | 0.062 |
このような結果になりました。
この結果は、偶然かもしれませんが、GCC 3.4.5よりもGCC 4.4.0の処理が遅くなっていることは、興味深いです。
また、VC7.1(VC++ Tookit 2003) の最適化とGCC 3.4.5が、ほとんど変わらなかったのも興味深いですね。
参考までに、サイズは、VC7.1の場合が、もっとも小さくなっていました。
※サイズに関しては、GCCは、非常に不利ですので、ここでは、あえて記述を避けています。
あくまで、上記のサンプルプログラムの結果です。
他のプログラムでは、別の結果を得ることもあると思います。 現に、色々なサイトでは、GCCの結果が良かったという記事も、よく目にします。
あくまで、ご参考程度にお願いします。
ただ、この結果が、何かの参考になれば幸いです。
他のプログラムでは、別の結果を得ることもあると思います。 現に、色々なサイトでは、GCCの結果が良かったという記事も、よく目にします。
あくまで、ご参考程度にお願いします。
ただ、この結果が、何かの参考になれば幸いです。
もっと、Qt関連について詳しく知りたい方は、以下の本なども良いと思います。Qtに関する日本語の本が少ないですね。「入門書」は、さすがに、このページを読まれるくらいの方は不要だと思います。
やっぱり、本+ネット+試してみる!!の3本柱でやっていく以外にないように思います。
入門 Qt 4 プログラミング |
Qtで簡単 GUIプログラミング―Qt入門書を読む前に読む「入門書」 |
プログラムを作ろう! Microsoft Visual C++ 2008 Express Edition 入門 (マイクロソフト公式解説書) |
もっと、Boostについて詳しく知りたい方は、以下の本なども良いと思います。
本から学ぶことは多いと思います。ネットだけでは判らない様々な事に気づかされます。
本から学ぶことは多いと思います。ネットだけでは判らない様々な事に気づかされます。
![]() Boost C++ Librariesプログラミング |
![]() Boost C++をチューンアップする最先端ライブラリ |



