- 締切済み
C++プログラムにおけるexeファイルサイズ
borland C++でプログラムを記述し、コンパイルするとexeファイルサイズがソースのそれの約100倍に増えます。 これを低減する方法を教示ください? gcc、g++、vccなど各種コンパイラによって異なるそうですが。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- mcWalker
- ベストアンサー率69% (27/39)
私もサイズは気になる方なので、ご参考になれば。 bcc5 で printf() だけのソース 85 バイトをコンパイルすると .exe は 52,224 バイトでした。 VD++6 で同じ .exe にすると、Release で 40,960 バイト、 Debug で、172,086 バイトでした。 bcc5 はちょっと大きめ程度ではないかと想像しました。 で、削減の方法は link map を取って見るのが確実と思いますが、 私の bcc5 では、統合開発環境風付きですが、link map を取る指定が分かりませんでした。 (make ファイルに記入できるとは思いますが、やっていません。) #1 の方もお書きですが、link されるルーチンを減らすのがよいと思います。 できれば、stdio.h, string.h は一切使わない。 必要なら、winAPI を使って、自前で標準関数を用意する。モノによっては asm で。 大して得にはなりませんが、global 変数を多用すると生成コードがポインタ load で大きめになることがあります。 逆アセ可能なら、サイズの大きいルーチンを見ると よいと思います。 global 構造体を参照する場合、一旦 local のポインタに 移して使うとかすると、register 命令に変わってサイズが 減ったりします。
- gatyan
- ベストアンサー率41% (160/385)
Borland C++ Builder なら、プロジェクトオプションで プログラムタブを開き、リリースを押すのか一番簡単ではないでしょうか? 行番号などのデバッグ情報を付加しない 共有ランタイムを使用する コード最適化は、サイズ優先にする 関数のインライン展開を許可しない 等が考えられますが、必ず組み込まれる初期化ルーチンがあったり、関数1つだけ使っていてもその関数が含まれるライブラリ単位でのリンクになったりするので、あまり効果は無いかも。