【问题标题】:comparing code size vs source size比较代码大小与源大小
【发布时间】:2009-01-04 15:13:18
【问题描述】:

有很多用于计算代码行数的脚本/工具,还有一些可以根据代码行数计算函数大小。 但在这里,我正在寻找一种方法来根据生成的代码字节来衡量函数大小。

有人知道从 .lib 或 .dll 中提取此信息的方法/工具吗?

例如,我知道如何列出 .lib 或 .dll 中的函数名及其起始地址,但我还没有找到获取它们内存占用的方法。

PS:我正在寻找 Windows 平台上的解决方案,但欢迎在替代系统上提供任何答案。

【问题讨论】:

    标签: memory dll code-generation code-analysis metrics


    【解决方案1】:

    我不确定它是否完全符合您的要求,但您可以尝试按照 this tutorial 解析地图文件。

    另外,如果您需要付费解决方案,ANTS profiler from Red-gate 是合理的。

    【讨论】:

      【解决方案2】:

      在 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,使用来自 /usr/ccs/binsize(不是 GNU 版本,但它可能会提供类似的信息)。

      Cygwin 下的 GNU size 说:

      $ 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) 上运行时,GNU size 表示它无法识别文件类型。 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
      

      【讨论】:

        猜你喜欢
        • 2018-12-04
        • 2011-04-17
        • 1970-01-01
        • 1970-01-01
        • 2019-10-31
        • 1970-01-01
        • 2020-05-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多