C++で試したら(1997.Dec.7):   追記です。 ----------------------------- #include int main(void) { cout << "Hello, world"; return 0; } ----------------------------- というソースをVC++ 4.0とgcc β18でコンパイルしました: gcc: 51,200 vc4.0: 27,648 となりました。え?gccの方がとんでもなくでかいっての?? でも事実ですねぇ。VCってC++を前提に最適化が考えられてるのかも。 下の計測結果から思えばVCの方がより良い結果を示すなどとは夢にも思っていません でしたから、とってもびっくり。 gccの純Win32のC++ライブラリは「作っただけで動作は保証しない」とか書いてあった けど、う〜む。β19ではどうなるんでしょうか? #VC++もタコなだけではないのね、と見直しました。う〜む  (あ?VC++が小さいのはダイナミックリンクしてるからとか?でも、デフォルトな   コンパイル結果がこうである、という点は評価したいな) ================================================================== 同一のソースから作成したGEN.EXEのサイズに付いて(1997.Sep.17):  ちなみにSDKサンプルを元にして必須ファイルを減らしたGEN.EXEである。今にして 思えば何も変更してないGEN32とかGENERICをコンパイルすべきだったと反省。  必須ファイルを減らした理由は、手でいちいちコマンドラインを打つのが面倒 だったということなのだが、追試容易性を考えたらすべきではなかった。  でもデータはデータなので紹介しておきます。 GEN.EXEのサイズ:  gcc (old) 11,776 bytes  gcc β18 11,264 bytes ; 凄い。旧版gccより更に小さいではないか!  lcc-Win32 14.880 bytes 14,848 bytes  lcc (new) 12,832 bytes ; お。順当に進化している... 12,800 bytes VC++ 4.0 24,064 bytes ; いきなり2倍だ?何か間違ったか!? 24,064 bytes VC++ 4.2 27,136 bytes 24,064 bytes ; strip後のサイズがVC++ 4.0と同じだ…  VC++ 5.0 31,232 bytes ; でかい(-_-; 28,160 bytes ちなみにGEN.EXEのソースは純粋なCであって、C++でもMFCでもありません。 #gcc以外のコンパイラで結果が2行になっているのは、それぞれのコンパイル  結果であるgen.exeにgcc付属のstrip.exeを使用して余分なデータを削除  してみたからです。  strip.exe自体はgccのコンパイル環境に付属しているものなので、本来は  インチキなのですが、興味深い結果が出たので併記しました。  gccの場合はstrip後の結果のみです。あ、無論ですがgccはminimalistの  奴なのでできたGEN.EXEはgccがインストールされていない環境でも問題なく  動作可能 #全て最適化はON。VC++の場合は/Ox。これがデフォルトの最適化オプション  という気がするので、他の最適化オプションでは試していない。  SDKのmakefileを用い、nmake NODEBUG=1 DEBUG=NOとした時のデフォルトです。 #このホームページにあるexecは元々lccの旧版でコンパイルしてたのですが、  新版でコンパイルするとでかくなってしまいました。得手不得手があるという  ことなんでしょうかね?  lccのReadmeによると、現在は細かい最適化しかしておらず、大域的最適化は  サポートしていない。細かい最適化にしても更に効果的なアイディアはある  のだが安定したオブジェクトを作ることができていない。だそうな。今後に  期待かな? 感想:  さすがはgcc。サイズだけが全てとは言わないが、この結果は大したものだ。  VC++の場合、工夫次第では違ったことになるかもしれない。が、何だかなぁ。  より新しいリリースになる程徐々に作る*.exeが肥大するってのは。普通、  逆でないかい?(ひょっとしてわざとやってねぇか>Microsoft) 追記:  コンパイル速度はlcc < gcc < VC++。特にVC++ 5.0はハングしてるんでは?と  思うぐらい遅い。lccが速いのは実はインチキがあって、lcc付属のWindowsヘッダ  ファイル、*.hにはコメントや冗長な定義がないから、I/Oアクセスのオーバー  ヘッドが少ないのであった。  しかしlccはそのおかげで必要なHDDサイズが異様に小さくて済むという利点もある。  Win32の*.h、*.lib、コンパイラ、付属ツール、統合環境、サンプルの一部、これら  全てを*.lzhすると2HD FDD 1枚に納まるのだ。冗談としか思えないかもしれないが本当  である。   あ、そうそう。かの有名なお試し版16 bit CコンパイラLSI-Cもlcc.exeがコンパイラ  の名前ですね。LSI-Cは達人の域に達するアセンブラコードを吐くと賞賛されてます。  お試し版はSmallモデルだけしか作れないものの、Smallモデルを作るだけなら機能に  制限なしという勇断の元にFreeで配布していました(現在もしてるのかな?)。   この間、必要あってVectorのCD-ROMで探したら見付かりました。lcc.exeって何か  馴染みがあったのですが、これだったのか!と思い出しました。   上で記述しているlccというのはもちろんLSI-Cではありません。32bitのCです。 PS. 誰かBC++やその他のCコンパイラでこの比較をやってみてみたい人はいませんか?   私も興味があるんですけど……。メールしてもらえば、ソース一式をバイナリ   メールしますけど?                               − 以上 −