confrontando la dimensione del codice con la dimensione della fonte
-
03-07-2019 - |
Domanda
Esistono molti script / strumenti per contare la riga di codice e alcuni per contare le dimensioni delle funzioni in termini di riga di codice. Ma qui sto cercando un modo per misurare la dimensione della funzione in termini di byte di codice generato.
Qualcuno conosce un modo / strumenti per estrarre queste informazioni da un .lib o un .dll?
Ad esempio, so come elencare il nome della funzione da un .lib o .dll e il loro indirizzo iniziale, ma non ho ancora trovato un modo per ottenere il loro footprint di memoria.
PS: sto cercando una soluzione sulla piattaforma Windows, ma qualsiasi risposta su un sistema alternativo è la benvenuta.
Soluzione
Non sono sicuro che sia proprio quello che stai cercando, ma potresti provare ad analizzare il file della mappa secondo questo tutorial .
Inoltre, se stai cercando una soluzione a pagamento, ANTS il profiler di Red-gate è ragionevole.
Altri suggerimenti
Su Unix, il comando size
ti fornisce informazioni al riguardo:
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:
File semi-casuali da tutto il mio sistema - che è Sun SPARC con Solaris 10, usando size
da / usr / ccs / bin
(non la versione GNU, ma è probabile che fornisca informazioni simili).
GNU size
sotto Cygwin dice:
$ 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)
Tuttavia, ciò potrebbe non essere di grande aiuto - quando eseguito su una DLL (C: \ WINDOWS \ twain.dll), GNU size
dice che non riconosce il tipo di file. OTOH, sembra capire i file '.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