VS 2013 / Zi编译器选项将静态库的大小加倍

时间:2016-01-04 13:42:50

标签: c++ visual-studio-2013 static-libraries filesize debug-symbols

我想知道为什么在VS 2013下,/ Zi编译器选项几乎将构建静态库的大小加倍。

据我所知/ / Zi选项,所有生成的调试信息都存储在.pdb文件中,并且只为每个.obj文件添加了指向该文件的链接。

似乎只有.exe和.dll文件大小保持不变,无论选项是/ Zi还是None。

我只能使用VS 2013测试这个,所以我不知道这是否也会与其他版本的VS一起发生。

1 个答案:

答案 0 :(得分:0)

这主要来自于.debug$S部分的增加。原因是当使用PDB时,并不是所有关于debug的东西都放到pdb中,调试符号仍然保存在h object/lib文件的.debug$S部分。放入pdb的内容至少包含类型信息,这就是使用/Zi或/ZI时.debug$T变得很小的原因,即在这些情况下它只包含指向pdb文件的指针。

你可以使用

dumpbin.exe your_lib.lib

显示结果。

对于大型库,大小可以从 4MB 增加到 20MB。

对于一个非常简单的库:

无调试:

       4 .bss
      60 .chks64
     138 .debug$S
      D2 .drectve
      18 .pdata
       8 .rtc$IMZ
       8 .rtc$TMZ
      2C .text$mn
      10 .xdata

/子:

       4 .bss
      98 .chks64
     848 .debug$S
      E0 .debug$T
     113 .drectve
       4 .msvcjmc
      18 .pdata
       8 .rtc$IMZ
       8 .rtc$TMZ
      76 .text$mn
      10 .xdata

/ZI:

       4 .bss
      C0 .chks64
    1454 .debug$S
      E0 .debug$T
     135 .drectve
       4 .msvcjmc
      18 .pdata
       8 .rtc$IMZ
       8 .rtc$TMZ
      89 .text$mn
      20 .xdata

/Z7:调试信息现在嵌入到 .debug$P 部分,.debug$S 也缩小了一点。

       4 .bss
      98 .chks64
    1210 .debug$P
     848 .debug$S
     78C .debug$T
     113 .drectve
       4 .msvcjmc
      18 .pdata
       8 .rtc$IMZ
       8 .rtc$TMZ
      76 .text$mn
      10 .xdata