Visual c++ Visual Studio 2013创建更大的exe';s-无MFC

Visual c++ Visual Studio 2013创建更大的exe';s-无MFC,visual-c++,linker,Visual C++,Linker,我提这个问题有点晚了,但迟做总比不做强。自Visual Studio 6.0面世以来,我一直在使用它,但最近在一台新电脑上切换到VS 2013 我已经让我的项目在2013年下构建,但是它生成的可执行文件始终比VS6.0生成的要大。我在这里看到了一个类似的线程,它发生在从VS2008到VS2010的转换过程中,那里的评论和建议似乎都将此更改归因于MFC库中静态链接的更改。但我的项目是纯C代码。没有C++,更不用说MFC了。我的项目上的“使用MFC”选项设置为“使用标准Windows库”(可能是由生

我提这个问题有点晚了,但迟做总比不做强。自Visual Studio 6.0面世以来,我一直在使用它,但最近在一台新电脑上切换到VS 2013

我已经让我的项目在2013年下构建,但是它生成的可执行文件始终比VS6.0生成的要大。我在这里看到了一个类似的线程,它发生在从VS2008到VS2010的转换过程中,那里的评论和建议似乎都将此更改归因于MFC库中静态链接的更改。但我的项目是纯C代码。没有C++,更不用说MFC了。我的项目上的“使用MFC”选项设置为“使用标准Windows库”(可能是由生成2013兼容项目的导入工具设置的)。它使用的唯一非标准库是wsock32.lib

额外的尺寸并不是杀手锏,但相对于整个应用程序的尺寸而言,它是一个重要的因素。我最大的.exe文件从980Kb增加到1.3Mb,对于一个以小尺寸为卖点的应用程序来说,它的大小增加了35%(即安装这个小应用程序,你就可以访问我们所有的好东西)。这是没有调试信息的-调试版本的增加甚至更多-但我真的不在乎这一点

你知道如何去掉新的积垢,甚至知道它是什么吗?

通常你会在两个系统上生成一个文件,并找出贡献最大的部分

安东的回答提醒我:首先检查它们是否以相同的方式链接(静态或动态,否则是苹果和橙子)

这就是如何使二进制文件更小

基本思路如下:

  • 不要忘记发布模式
  • 声明
    #定义WIN32_LEAN_和_MEAN
  • 动态链接到C++运行时
  • 在没有调试信息的情况下编译可执行文件
  • 使用/O1编译,这是一个“针对大小优化”标志
  • 删除iostream和fsstream头,如果可能,使用低级别

  • 从历史上看,在一次调用中链接到“printf”通常会带来大量静态lib代码。我不是说你的问题是printf,但可能是由于一些新特性(例如,自VS6以来,WinSock增加了多少功能?)另一种可能性是,由于VS6,编译器代码Gen中添加了安全性特征。即使您不愿意在C++运行时DLL的单独安装上添加依赖项,也可以使用<代码> / MD < /代码>进行构建,因为这将给出一个很好的指示,说明了大小是由应用程序和库所组成的。你正在追赶16年的处理器开发和C++代码优化器改进。更大的代码可以更快的代码,内联和循环展开优化由于更大的CPU缓存而更具攻击性,自动矢量化和自动并行化不可避免地使用更复杂的指令。字节数便宜了100倍,没有必要为1.3倍的大小增加而烦恼。#6还可以给你带来巨大的速度提升作为奖励。