PIp*_*3am 8 c c++ winapi visual-studio-2015
即使我知道我可能会因为提出这个问题而受到抨击,但我仍然会继续问它,因为它确实让我疯了.我希望也许你们中的一个人对此事有所了解.
在VS2013上编译MS的WIN32默认('非空'设置)项目产生的二进制大小约为16kb.在VS2015 Update3上编译相同的项目会产生大约105kb的二进制大小(超过6倍!).
我对传递给cl.exe和link.exe的最终命令行参数进行了双重和三重检查,它们看起来完全相同(项目设置).即使项目设置的变化 - 有利于大小超过速度 - 也无济于事(二进制仍然是105kb).到底是怎么回事?我甚至在第二台计算机上安装了VS2015,以排除"有缺陷"的安装 - 相同的结果(105kb).因为我已经完成了这一点,所以请求帮助.
我目前没有安装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.