3

私のプロジェクトでは、テンプレート メタプログラミングを多用しています。アクションのほとんどは、非常に長い (マングルされた) シンボル名を持つオブジェクトと関数を生成する再帰テンプレート内で発生します。

ビルド時間はわずか 30 秒ですが、結果として得られる実行可能ファイルは約 1 メガバイトで、ほとんどがシンボル名です。

Linux では、-sGCC に引数を追加するとサイズが ~300 KiB に減少しますが、テキスト エディターでざっと見ると、そこにはまだ扱いにくい名前がたくさんあることがわかります。OS X で何かを適切に削除する方法が見つかりません。

typeid(x).name()提供する vtable エントリが大きなチャンクを占めていると思われます。演算子の使用をすべて削除してtypeidも、Linux ではそれ以上削除されることはありませんでした。デフォルトの例外ハンドラーは、この機能を使用して、キャッチされていない例外のタイプを報告していると思います。

ストリップページを最大化し、実行可能ファイル内のこれらのキロバイト サイズのシンボルを最小化するにはどうすればよいですか?

4

1 に答える 1

-2

strip最終的な実行可能ファイルでプログラムを実行するだけです。より手の込んだものにしたい場合は、他のツールを使用してデバッグ情報を個別に保存できますが、指定された目的のためにstrip a.outは問題ありません。おそらく--strip-allオプションを使用してください。デフォルトの動作と異なるかどうかを確認するために自分で試したことはありません。

本当に RTTI を無効にしてみたい場合は、gcc -fno-rtti. しかし、それはあなたのプログラムをひどく壊すかもしれません-私が推測する唯一の方法です。

于 2013-10-17T12:38:50.213 に答える