我必须维护包含多个项目的大型旧代码库(不是我自己编写的),其中大多数都是C ++。我的第一步是将代码库从VS 2008升级到VS 2013。
两种解决方案都针对大小进行了优化(在发行版本中)。但是,二进制文件的大小现在几乎在所有二进制文件中都增加了约30%-我很难解释。
这些项目大量使用了ATL,而且我知道ATL 9已移至静态库,但是我怀疑这能否解释所有的大小差异。
任何想法:
尺寸差异的解释是什么。VS12是否由于此尺寸更改而更安全或更具有更好的性能(寻找“关键点”以出售此交换机)?
寻找方法来减小二进制文件的大小,从低挂的水果开始,到更复杂的工作。
在假定您静态链接MFC的情况下:
放
#define _AFX_NO_MFC_CONTROLS_IN_DIALOGS
在的顶部stdafx.h
,或_AFX_NO_MFC_CONTROLS_IN_DIALOGS
在项目设置中添加到预处理器定义。
MSVC 2010包含大量新的扩展控件(大多数控件与功能区相关,但也与a CMFCButton
,其他功能相关。MSVC2008还具有一个功能部件包)。可以像以前的Windows控件一样,通过资源编辑器将这些新控件添加到对话框中。
为了使此工作,解析RC文件1的代码需要知道所有新的MFC控件类。如果动态链接MFC,这不是问题,但是如果静态链接它们,则意味着无论是否使用它们,MFC的所有闪亮的新部分都已链接到您的应用程序中。因此,我的二进制大小为三倍。
很快,这变成了比Microsoft员工想象的更大的问题。静态链接MFC显然比他们预期的要普遍。解决MSVC 2010中的问题仍然很痛苦,但是在下一个版本中,引入了一种禁用新功能的机制:_AFX_NO_MFC_CONTROLS_IN_DIALOGS
预处理器宏。如果在任何包含MFC头之前定义了它,则RC解析器代码将不处理新控件,并且不会引入对它们的依赖关系。请注意,这意味着无法通过资源编辑器将新控件添加到对话框中。
可以在此MSDN博客文章中找到有关问题和解决方案的更详细的技术说明。
1是的,我在这里详细介绍一些细节。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句