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.

È stato utile?

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top