WINAPI C/C++ - >为什么二进制大小会急剧增加?(从VS2013切换到VS 2015)

PIp*_*3am 8 c c++ winapi visual-studio-2015

即使我知道我可能会因为提出这个问题而受到抨击,但我仍然会继续问它,因为它确实让我疯了.我希望也许你们中的一个人对此事有所了解.

在VS2013上编译MS的WIN32默认('非空'设置)项目产生的二进制大小约为16kb.在VS2015 Update3上编译相同的项目会产生大约105kb的二进制大小(超过6倍!).

我对传递给cl.exe和link.exe的最终命令行参数进行了双重和三重检查,它们看起来完全相同(项目设置).即使项目设置的变化 - 有利于大小超过速度 - 也无济于事(二进制仍然是105kb).到底是怎么回事?我甚至在第二台计算机上安装了VS2015,以排除"有缺陷"的安装 - 相同的结果(105kb).因为我已经完成了这一点,所以请求帮助.

cbr*_*nch 9

我目前没有安装VS 2013,但我只是对VS 2010和VS 2015进行了快速测试.在每个版本中,我创建了一个"Win32项目"(Windows应用程序,非空,无ATL,无MFC) ).32位版本构建的结果文件大小为:

VS 2010: 57,344
VS 2015: 104,448
Run Code Online (Sandbox Code Playgroud)

dumpbin /headers在两个可执行文件上运行显示代码大小略有不同,但主要区别似乎是资源:

VS 2010 .rsrc size: 0xC200 (about 49K)
VS 2015 .rsrc size: 0x17200 (about 92K)
Run Code Online (Sandbox Code Playgroud)

经过仔细检查,VS2015版本中的图标资源有更多选择(不同大小,不同位深度).所以这似乎是我的测试用例中的大小差异.

编辑:按PE部分细分的可执行文件大小的比较:

+---------+-----------------+-----------------+-------+
| Section |     VS 2010     |     VS 2015     | Change|
|         | (hex)  | (dec)  | (hex)  | (dec)  | (dec) |
+---------+--------+--------+--------+--------+-------+
| .text   | 0xC00  | 3072   | 0x1000 | 4096   |  1024 |
| .rdata  | 0x800  | 2048   | 0xC00  | 3072   |  1024 |
| .data   | 0x200  | 512    | 0x200  | 512    |     0 |
| .rsrc   | 0xC200 | 49664  | 0x17200| 94720  | 45056 |
| .reloc  | 0x400  | 1024   | 0x200  | 512    |  -512 |
| .gfids  | n/a    | n/a    | 0x200  | 512    |   512 |
+---------+--------+--------+--------+--------+-------+
                                        Total | 47104 |

因此,当您排除.rsrc时,总差异为2K.