私はc++コードの簡単な部分を持っています:
#include <iostream>
using namespace std;
int main ()
{
cout << "Hello World!";
return 0;
}
このコードのアセンブリを生成すると、標準ライブラリのコンパイルであると思われる巨大なアセンブリファイルが得られます。なぜこれが発生し、どうすればそれを防ぐことができますか?
私はc++コードの簡単な部分を持っています:
#include <iostream>
using namespace std;
int main ()
{
cout << "Hello World!";
return 0;
}
このコードのアセンブリを生成すると、標準ライブラリのコンパイルであると思われる巨大なアセンブリファイルが得られます。なぜこれが発生し、どうすればそれを防ぐことができますか?
標準ライブラリの多くはテンプレートで構成されています。テンプレートを使用すると、その使用に特化され、その特殊化はバイナリの一部になります。これは避けられませんが、externテンプレートを使用して、翻訳ユニットの1つだけに特化することを保証できます。
std::cout は標準ライブラリの一部です。
あなたはそれを使いました。
本当に明らかです。
Iostream はテンプレートであるため、コードは共有ライブラリではなくオブジェクトで発行されますが、最適化が有効になっている場合、(削除された) サイズは、helloworld を実装するために必要なサイズよりも大きくなってはなりません。
別の回答については、 http://www2.research.att.com/~bs/bs_faq.html#Hello-worldを参照してください。