Cコンパイラの話

更新日:2004-04-01、趙

◎紹介

Cは、コンパイラの数からでも分かりますが、これまでもっとも成功したプログラミング言語です。以下、いくつか特徴のあるコンパイラをご紹介します。

1)gcc(GNU Compiler Collection)

フリーでオープンソース(だれでもソースを見ることができる!)にもかかわらず、速度だけでも下記のiccに近いか匹敵できるレベルまで進化してきたgccは、本キットに収録されています。60種類以上のプラットフォームをサポートしています(世界記録。逆にサポートしないプラットフォームがあるか のように気になってしまいます)。

2)icc(Intel C++ Compiler)

x86というシリーズのIntel製CPUまたはそれの互換品を使っているPCに限っては、当然ながらIntelが売っているコンパイラが一般に最高の性能をもっています。Windows、Linux等3、4種類のプラットフォームをサポートしています。商用、ただし、個人使用に限り、無料のLinux版があります(そうしないと使ってもらえないかな、gccがあるから)。

3)Microsoft Visual C++

厳密に、これは開発環境であり、コンパイラではないのですが、コンパイラは、名前があるとしたら cl かな?という感じで、Windowsでしか動かないプログラムを作るのに得意な商用ソフトです。個人使用に無料ダウンロード版があります(もちろんVisual C++ではなくてclですが、念のため)。

4)bcc(Borland C/C++ Compiler)

一時世界最高の開発環境Turbo C(私はこれでCを始めました)を作り出したBorlandも有名です。近年MSに圧倒されたみたいですが、ファンが結構多い(他の選択肢がほぼないため?)。Windows専用、個人使用には無償でダウンロードできます。

その他、thefreecountry.comのリストに約30個(無償)コンパイラを収録しています。

◎一考察

このキットのまとめに当たり、ついでにコンパイラについて簡単に考察してみました。実行ファイルの性能(サイズ、速度)は、当然ながらコンパイラの性能次第ですからね。

以下、私が参考のために サンプルソースhello.cを無料で入手できるコンパイラでコンパイルし、その結果をまとめたものです。実験は、それぞれのデフォルト設定で最適化とかしていないことを強調しておきます(まあ、hello.cに対してはやっても変わらないでしょうが)。参考程度ぐらいに考えてください。もっと詳しい比較は、Googleで調べるといい。

ソース

 #include <stdio.h>
 
 int main(void) {
         printf("Hello, world.\n");
         printf("こんにちは。\n");
         return 0;
 }

コンパイルの仕方

  gcc(bcc、cl)は、コマンドラインでgcc(bcc32、cl)hello.c
  参考のため、Visual C++でもRelease版としてコンパイルしました。

コンパイルの結果

実行可能ファイルのサイズ

データの一行目は、生成した実行ファイルのサイズ(単位:バイト)、二行目は、MinGW日本版のstripを使ってシンボルを切り捨てた後のサイズです。

 gcc(MinGW)  gcc(MinGW日本版)      cl         bcc    Visual C++
   v3.3.3           v3.3.3        v13.10.3077   v5.5.1       6.0
---------------------------------------------------------------------
  14,627           404,651           36,864     52,224    40,960
   5,120             5,632           30,208     51,712     34,304

結果は一目瞭然。。。ですが、よく分からない人もいるでしょう。簡単に言うと、二行目は、最終版として配布可能ファイルのサイズです。速度のことを考えなければ、小さければ小さいほどよいわけ。これで分かりますね。因みに、Linux(Fedora Core 1)でgcc v3.3.2でコンパイルした結果は、それぞれ 4,667、2,900になっています。

実行可能ファイルの速度

サイズよりは実行速度のほうがもっと重要の場合もよくありますが、それの比較は簡単ではない。HelloWorldのような簡単なプログラムでは、まず比較することができませんよ。やっぱり、Googleとかで調べてください。