2

コード行をカウントするためのスクリプト/ツールはたくさんあり、コード行に関して関数のサイズをカウントするものもあります。しかし、ここでは、生成されたコードのバイト単位で関数のサイズを測定する方法を探しています。

.lib または .dll からこの情報を抽出する方法/ツールを知っている人はいますか?

たとえば、.lib または .dll から関数名とその開始アドレスを一覧表示する方法は知っていますが、それらのメモリ フットプリントを取得する方法はまだ見つかりません。

PS : Windows プラットフォームでの解決策を探していますが、代替システムでの回答は大歓迎です。

4

2 に答える 2

1

それがあなたの求めているものかどうかはわかりませんが、このチュートリアルに従ってマップファイルを解析してみてください。

また、有料のソリューションを探している場合は、Red-gate の ANTS プロファイラーが妥当です。

于 2009-01-04T15:28:58.367 に答える
1

Unix では、sizeコマンドはそれに関する情報を提供します。

Black JL: size /usr/lib/libc.so.1
909301 + 32017 + 6731 = 948049
Black JL: size ~/lib/libjl.a
/work1/jleffler/lib/libjl.a[affbak.o]: 4849 + 44 + 4 = 4897
/work1/jleffler/lib/libjl.a[affstd.o]: 5488 + 48 + 4 = 5540
/work1/jleffler/lib/libjl.a[base64.o]: 8772 + 9 + 320 = 9101
/work1/jleffler/lib/libjl.a[basedigit.o]: 841 + 0 + 0 = 841
/work1/jleffler/lib/libjl.a[basename.o]: 996 + 0 + 0 = 996
/work1/jleffler/lib/libjl.a[bitmap.o]: 3876 + 8 + 4096 = 7980
...lots of entries omitted...
Black JL: size ~/bin/sqlcmd.64
169694 + 17728 + 8280 = 195702
Black JL: size cc3e_*.o | so
cc3e_fixed_from_gregorian.o: 1906 + 0 + 0 = 1906
cc3e_gregorian_date.o: 684 + 0 + 0 = 684
cc3e_gregorian_epoch.o: 707 + 0 + 0 = 707
cc3e_gregorian_from_fixed.o: 1729 + 0 + 0 = 1729
cc3e_gregorian_year_from_fixed.o: 1625 + 0 + 0 = 1625
cc3e_last_kday.o: 742 + 0 + 0 = 742
cc3e_nth_kday.o: 1123 + 0 + 0 = 1123
Black JL:

私のシステム周辺からのセミランダムファイル - これはSolaris 10を実行しているSun SPARCで、sizefromを使用して/usr/ccs/binいます(GNUバージョンではありませんが、同様の情報を提供する可能性があります)。

sizeCygwin の下のGNUは次のように述べています。

$ size libjl.a
text    data     bss     dec     hex filename
 800      64      16     880     370 affbak.o (ex libjl.a)
1008      64      16    1088     440 affstd.o (ex libjl.a)
 176       0       0     176      b0 basedigit.o (ex libjl.a)
 208       0       0     208      d0 basename.o (ex libjl.a)
 544     320    4096    4960    1360 bitmap.o (ex libjl.a)
 816       0      16     832     340 block.o (ex libjl.a)

ただし、これはあまり役に立たない可能性があります。DLL (C:\WINDOWS\twain.dll) で実行すると、GNUsizeはファイルの種類を認識しないと言います。OTOH、「.lib」ファイルを理解しているようです:

jleffler@IBM-027DF09B37F /cygdrive/c/notes/jvm/bin
$ size jawt.lib
   text    data     bss     dec     hex filename
     63      30       0      93      5d jawt.dll (ex jawt.lib)
     63      20       0      83      53 jawt.dll (ex jawt.lib)
     63       8       0      71      47 jawt.dll (ex jawt.lib)
      8      26       0      34      22 jawt.dll (ex jawt.lib)

jleffler@IBM-027DF09B37F /cygdrive/c/notes/jvm/bin
$ ls -l jawt.lib
-rwxrwxrwx+ 1 jleffler None 1692 Oct 25  2007 jawt.lib
于 2009-01-04T16:19:32.163 に答える