【发布时间】:2014-09-03 21:08:37
【问题描述】:
这个问题我有点晚了,但迟到总比没有好。自从 Visual Studio 6.0 发布以来,我一直在使用它,但最近在新 PC 上切换到 VS 2013。
我的项目要在 2013 年以下构建,但它生成的可执行文件始终比 VS6.0 生成的要大。我在这里看到了一个类似的线程,关于从 VS2008 到 VS2010 的过渡中发生的事情,并且那里的 cmets 和建议似乎都将更改归因于静态链接的 MFC 库中的更改。但是我的项目是直接的 C 代码.没有 C++,更不用说 MFC。并且我的项目上的“使用 MFC”选项设置为“使用标准 Windows 库”(可能是由生成 2013 兼容项目的导入工具设置的)。它使用的唯一非标准库是 wsock32.lib。
额外的大小并不是一个杀手,但它相对于整个应用程序的大小来说很重要。我最大的 .exe 从 980Kb 到 1.3Mb - 对于一个以小尺寸为卖点的应用程序来说,大小增加了大约 35%(即安装这个小应用程序,您就可以访问我们所有的好东西)。那是没有调试信息 - 调试版本的增加更多 - 但我并不关心。
任何想法如何去除新的杂物 - 甚至知道它是什么?
【问题讨论】:
-
从历史上看,在一次调用中链接到“printf”用于引入大量静态库代码。我并不是说您的问题是 printf,但由于一些新功能(例如,自 VS6 以来已向 WinSock 添加了多少功能?),它可能是一些现在非常繁重的 lib 调用?另一种可能性是向编译器添加了安全功能从 VS6 开始的代码生成。
-
即使您不愿意添加对单独安装 C++ 运行时 DLL 的依赖项,也请使用
/MD进行构建,因为这可以很好地指示大小是多少归因于您的应用程序与库。 -
您正在赶上 16 年的处理器开发和 C++ 代码优化器改进。更大的代码可以是更快的代码,由于更大的 CPU 缓存,内联和循环展开优化更加激进,自动矢量化和自动并行化不可避免地使用更复杂的指令。字节便宜了 100 倍,为 1.3 倍的大小增加而烦恼是毫无意义的。
标签: visual-c++ linker