Pregunta

Hay muchas secuencias de comandos / herramientas para contar la línea de código, y algunas para contar el tamaño de las funciones en términos de línea de código. Pero aquí estoy buscando una manera de medir el tamaño de la función en términos de bytes del código generado.

¿Alguien sabe una forma / herramientas para extraer esta información de un .lib o un .dll?

Por ejemplo, sé cómo enumerar el nombre de la función de un .lib o .dll, y su dirección de inicio, pero todavía no he encontrado una manera de obtener su huella de memoria.

PD: Estoy buscando una solución en la plataforma de Windows, pero cualquier respuesta en un sistema alternativo es bienvenida.

¿Fue útil?

Solución

No estoy seguro de que sea lo que buscas, pero puedes intentar analizar el archivo de mapa según este tutorial .

Además, si busca una solución paga, las ANTS El generador de perfiles de Red-gate es razonable.

Otros consejos

En Unix, el comando size le brinda información sobre eso:

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:

Archivos semialeatorios de todo mi sistema, que es Sun SPARC con Solaris 10, usando size de / usr / ccs / bin (no la versión GNU, pero es probable que proporcione información similar).

GNU size en 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)

Sin embargo, eso puede no ayudar mucho: cuando se ejecuta en una DLL (C: \ WINDOWS \ twain.dll), el size de GNU dice que no reconoce el tipo de archivo. OTOH, parece entender los archivos '.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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top