从Visual Studio 2008升级到Visual Studio 2013时,二进制大小将增长30% 我必须用一个大的、旧的代码库(不是我写的)来维护多个项目,其中大部分是C++。我的第一步是将代码库从VS2008升级到VS2013

从Visual Studio 2008升级到Visual Studio 2013时,二进制大小将增长30% 我必须用一个大的、旧的代码库(不是我写的)来维护多个项目,其中大部分是C++。我的第一步是将代码库从VS2008升级到VS2013,c++,visual-c++,visual-studio-2013,C++,Visual C++,Visual Studio 2013,这两种解决方案都设置为优化大小(在发布版本中)。然而,二进制文件的大小现在大约大了30%,几乎在所有二进制文件中都是如此——我很难解释这一点 这些项目大量使用ATL,我知道ATL9迁移到了静态库,但我怀疑这能否解释所有的大小差异 有什么想法吗 尺寸差异的原因是什么。由于这种尺寸变化,VS12是更安全还是性能更好(寻找“关键点”来销售此交换机) 寻找减少二进制大小的方法,从低挂果实开始到更精细的工作 假设您正在静态链接MFC: 解决方案 放 在stdafx.h的顶部,或将\u AFX\u NO\u

这两种解决方案都设置为优化大小(在发布版本中)。然而,二进制文件的大小现在大约大了30%,几乎在所有二进制文件中都是如此——我很难解释这一点

这些项目大量使用ATL,我知道ATL9迁移到了静态库,但我怀疑这能否解释所有的大小差异

有什么想法吗

  • 尺寸差异的原因是什么。由于这种尺寸变化,VS12是更安全还是性能更好(寻找“关键点”来销售此交换机)

  • 寻找减少二进制大小的方法,从低挂果实开始到更精细的工作


  • 假设您正在静态链接MFC:

    解决方案 放

    stdafx.h
    的顶部,或将
    \u AFX\u NO\u MFC\u控件添加到项目设置中的预处理器定义中

    解释 MSVC 2010包含大量新的扩展控件(其中大多数与Ribbon相关,但也有一个
    CMFCButton
    和其他功能。MSVC 2008还有一个功能包)。这些新控件可以通过资源编辑器添加到对话框中,就像旧的Windows控件一样

    为了实现这一点,解析RC文件1的代码需要知道所有新的MFC控制类。如果动态链接MFC,这不是问题,但如果静态链接,则意味着无论您是否使用MFC,MFC所有闪亮的新部分都链接到应用程序中。因此,我有一个二进制三元组

    很快,这就变成了一个比微软人想象的更大的问题;静态链接MFC显然比他们预期的更常见。在MSVC 2010中解决了这个问题,但在下一个版本中,引入了一种机制来禁用新功能:对话框中的
    \u AFX\u NO\u MFC\u CONTROLS\u
    预处理器宏。如果它是在包含MFC头之前定义的,则RC解析器代码不会处理新控件,也不会引入对它们的依赖关系。请注意,这意味着不能通过资源编辑器将新控件添加到对话框中

    有关问题和解决方案的更详细技术说明,请参见


    1是的,我在这里掩饰了一些细节。

    胡乱猜测:它是否静态链接MFC?如果是这样,
    #在MFC
    之前的
    stdafx.h
    对话框中
    定义_AFX\u NO_MFC\u控件#包括
    s(或将其放在项目选项中),看看这是否解决了问题。旧项目是在32位机器上完成的吗?64位代码可以更大,请参阅
    #define _AFX_NO_MFC_CONTROLS_IN_DIALOGS