gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 17:40:01 26 4
gpt4 key购买 nike

即使我知道我可能会因为问这个问题而受到抨击,但我仍然会继续问这个问题,因为它真的让我抓狂。我希望你们中的某个人可能对此事有所了解。

在 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

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

VS 2010 .rsrc size: 0xC200 (about 49K)
VS 2015 .rsrc size: 0x17200 (about 92K)

仔细一看,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。

关于c++ - WINAPI C/C++ -> 为什么二进制文件的大小会急剧增加? (从 VS2013 切换到 VS 2015),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41386896/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com