2011-07-12 17 views
2

私は、すべての大きな静的に宣言された配列を見つけることによって(MINGW/GCCを使用して)実行可能ファイルのサイズを縮小しようとしています。集計サイズとともにデータシンボルのリストをダンプする方法はありますか?私はnmとobjdumpのmanページを見てきましたが、これまでのところ有用なものは見当たりません。オブジェクトファイルの静的宣言のサイズをリストする方法は?

Thx。

+0

注意を、これらの大規模な配列も完全に初期化されない限り、.exeファイルのサイズには影響しません。もしそうであれば、おそらくツールチェーンを見つける必要はありません! – Clifford

答えて

7

GNU binutilsから--print-sizeオプション(略称-S)のnmユーティリティを使用してください。たとえば、オブジェクト・ファイル内の20個の最大のシンボルを見つけるために、次の操作を行います。大規模な静的配列のサイズを小さくすることは、あなたがどのような場合にはいきおそらく何で、プログラムの実行時のメモリフットプリントを削減することを

nm --print-size --size-sort objfile.o | tail -20 
+0

nmにバグがあると思います。 -Sはサイズを印刷するはずですが、それはありません。これは--size-sortフラグでのみ実行されます。 – Saideira

3

リンカは、その情報を提供するMAPファイルを生成できます。

コンパイルとリンクするGCCを使用している場合は、リンカにリンカ・オプションを渡すと:

-Wl,<comma-separate-options-list> 

ldを直接呼び出す場合は、明らかにだけ、リンカオプションを渡します。

必要なリンカオプションは次のとおりです。

-Map=<mapfilename> 

ます。また、マップファイルにクロスリファレンステーブルを含めるために--crefを使用することができます。

+0

+1、単純で正確な答えのために: –

+0

私はサイズが-Mフラグでオブジェクトモジュールごとにのみ報告されて参照してください。おそらく他のフラグが故障のために必要ですか? – Saideira

+0

@Saideira:ああ、長い間GNUを使用していないのですが、私の現在のコンパイラマップファイルは、オブジェクトサイズ、最悪のスタック使用量、およびその他の有用な情報を報告します。 @アダムは良い答えを提供しました。それと一緒に行く。 – Clifford

関連する問題