先週私はkillallcops.exeと呼ばれる簡単なゲームをWeb上で見つけました。 私はバイナリを研究し、なぜプログラマがそれほど大きいのだろうと思った。 (約460K)コンパイルされたバイナリのサイズは、使用するライブラリにどのように依存しますか? c/C++
だから私はグラムとそれをコンパイルしたのiostream
#include <iostream>
int main(){
std::cout << "All cops are killed.\nCongratulations";
std::cin.ignore();
return 0;
}
を使用してゲームを書き直し++、あまりにも460Kを得ました。
この事はとても大きかったとstdioの
#include <stdio.h>
int main(){
printf("All cops are killed.\nCongratulations");
while(getchar() != '\n'){}
return 0;
}
gccで、それをコンパイルし、13Kを得たを使用してそれを書き直し、なぜ私は本当に疑問に思いました。
iostreamはstdio(typesafetyなど)よりもはるかに優れていることがわかっています。そのため、サイズが大きくなり、iostreamを使用するとサイズが小さくなるソリューションがあります。それの部分?
編集:私はLinux上で再現していないcygwinの
1つの推測:テンプレート。 –
コンパイルするアセンブリを表示できますか? –
''は、単純な 'cout'呼び出しを使っていても、多くの内部依存関係を持っています。それには、(テンプレートコードなどを含む)多くの他のコード/ヘッダが必要です。コンパイラ/リンカは彼らが何をしているのかを知ることができますが、バイナリサイズを減らしたい場合は、シンボルを削除する 'gcc -s'や最適化を試みる' -Os'のようなオプションを試してみてくださいサイズのバイナリ。しかし、重要なアプリケーションでは、 ''の持ち込みサイズはあまり重要ではありません。 –
birryree