2009-01-04 18 views
2

Il y a beaucoup de script/outils pour compter la ligne de code, et certains pour compter la taille des fonctions en termes de ligne de code. Mais ici, je cherche un moyen de mesurer la taille de la fonction en termes d'octets de code généré.comparaison de la taille du code et de la taille de la source

Est-ce que quelqu'un connaît un moyen/outils pour extraire cette information d'un .lib ou d'un .dll? Par exemple, je sais comment lister le nom d'une fonction à partir d'un .lib ou d'un .dll, et leur adresse de début, mais je n'ai pas encore trouvé de moyen d'obtenir leur empreinte mémoire. PS: Je suis à la recherche d'une solution sur la plate-forme Windows, mais toute réponse sur un système alternatif est la bienvenue.

Répondre

1

Je ne suis pas sûr que ce soit tout à fait ce que vous cherchez, mais vous pouvez essayer d'analyser le fichier map selon this tutorial. En outre, si vous recherchez une solution payante, le ANTS profiler from Red-gate est raisonnable.

1

Sur Unix, la commande size vous donne des informations à ce sujet:

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: 

fichiers semi-aléatoires à partir autour de mon système - qui est SPARC sous Solaris 10, en utilisant size de /usr/ccs/bin (pas la version GNU, mais il est susceptible de donner des informations similaires).

GNU size sous Cygwin dit:

$ 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) 

Toutefois, cela ne peut pas aider beaucoup - lorsqu'il est exécuté sur une DLL (C: \ WINDOWS \ twain.dll), GNU size dit qu'il ne reconnaît pas la Type de fichier. OTOH, il semble comprendre les fichiers '.lib':

[email protected] /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) 

[email protected] /cygdrive/c/notes/jvm/bin 
$ ls -l jawt.lib 
-rwxrwxrwx+ 1 jleffler None 1692 Oct 25 2007 jawt.lib