みけCATのにっき(仮)
つれづれなるまゝに、日くらし、PCにむかひて、心に移りゆくよしなし事を、そこはかとなく書きつくれば、あやしうこそものぐるほしけれ。
(本当か!?)
出典

僕のC++バイナリは大きい

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

僕のC++バイナリは大きい

投稿記事 by みけCAT » 13年前

最新のDXライブラリを使用したプログラムのバイナリがかなり大きくなった(4MBくらい)ので、
stripでファイルサイズを小さくしました。
それでも3.5MBくらいあります。前のDXライブラリだと2MBくらいだった気がするんだが?気のせいかな?

さて、ついでにstripの前後でどのくらいバイナリのサイズが変わるかを調べてみました。
用意したのは、単純なHello Worldのプログラムです。
C言語(hwtest.c)

CODE:

#include 

int main(void) {
	puts("Hello World");
	return 0;
}
C++(hwtest2.cpp)

CODE:

#include 

int main(void) {
	std::cout << "Hello World" << std::endl;
	return 0;
}
これをコンパイルすると、
C言語:47KB C++:1414KB となりました。
Hello Worldだけで1MBを超えるなんて、大きすぎます。もちろん、DXライブラリなんて使っていません。
でも、まだstripしていないからかもしれません。strip -pをかけてみます。(-pはタイムスタンプを維持するオプション)
結果は・・・
C言語:8KB C++:642KB です。
stripしてもC++は大きすぎます。しかもやっていることはC言語と同じHello Worldを表示するだけです。
逆に、C言語のバイナリはけっこう小さくなりました。
結論:C言語でできることはC言語でやりましょう。
cpp_is_very_big.png
実験のスクリーンショットです。
cpp_is_very_big.png (57.93 KiB) 閲覧数: 313 回
実験環境
Windows Vista SP2 32ビット
gcc version 4.7.0 (GCC)
コンパイルオプション
C言語: -finput-charset=cp932 -fexec-charset=cp932 -static -std=c99
C++: -finput-charset=cp932 -fexec-charset=cp932 -static

ちなみに、-staticを外すとバイナリがMinGW付属のDLLに依存してしまうので、外せません。

アバター
へにっくす
記事: 634
登録日時: 13年前

Re: 僕のC++バイナリは大きい

投稿記事 by へにっくす » 13年前

そりゃgccだし。しかも-staticオプションで本来ならDLLから読みだすものも取り込んでいるから大きくなって当然かと思いますが…
まあでもCかC++かで結構差があるんですねえ。。

同じコードをVS2005でもコンパイルしてみました。
上の方がC言語、下の方がC++言語。
► スポイラーを表示
両方とも10k超えません(オプションはデフォルトです)。
このへんやっぱMicrosoft提供だけあるなと にやり
最後に編集したユーザー へにっくす on 2012年8月04日(土) 21:46 [ 編集 1 回目 ]