VC写的程序体积是挺大的,网上也有不少优化的文章,都是针对VC6.0来讲的。我把个人总结下。 windows
#include <windows.h>
#pragma comment(lib,"kernel32.lib")
#pragma comment(lib,"user32.lib") 函数
写Win32程序的话,windows.h 是必须的,使用动态链接必要的系统库,能够把link下的连接库所有删除,须要就练级。 测试
#pragma comment(lib,"msvcrt.lib") 优化
这句是用来动态链接VC库的,使用VC6.0的能够加上,可是使用VS2008之后的就不要加了。我是用VS2010的时候,编译后须要 msvcr100.dll 文件。VS2010一旦静态连接了msvcrt.lib,体积立立刻到28,若是复杂点的程序可能会更大。如个仅仅是一个HelloWorld,一个MessageBox的话,由于不须要用到msvcrt.lib,因此体积不会增长的,这个时候加不加这句话都无所谓。 ip
#pragma comment(linker, "/SUBSYSTEM:windows") io
这句是用来讲明是win32程序,不是控制台的程序,控制台的程序会有个黑窗口。能够再程序里写,也能够再配置里写。 编译
#pragma comment(linker, "/ENTRY:main") 配置
这个用来更改入口函数,对vs2010编译的程序,效果很明显。一旦指定了入口函数,体积真的是立马下来了。 程序
#pragma comment (linker, "/ALIGN:512") 方法
对齐方式,这个我用VS2010测试的时候,修改这个,编译后的程序都提示不是有效的Win32程序。VC6.0上没问题。VS2010编译的同志就不要改了。VC6.0的能够修改测试,数值还能够减小。
#pragma comment(linker, "/merge:.data=.text")
#pragma comment(linker, "/merge:.rdata=.text")
合并区段。我认为是没什么必要,编译的时候会有警告。VS2010编译后可能会出现程序不能正常运行,VC6.0的正常,不推荐。
#pragma comment(linker, "/OPT:NOWIN98")
不对Windows 98系统作优化。VS2010已经取消了这个选项,若是加上这句话,编译的时候会出现警告。VC6.0加着句话,也能减小很多的体积。VC6.0上,推荐使用。
OPtimization Minimize Size(/O1)
C/C++选项里的,最小体积编译,效果不明显。
最后看下效果:
Code Snippet
这段代码使用VS2010编译后体积也只有3K。其余一些优化,对体积的影响不明显,基本能够忽略不计。不过你们有兴趣的话,能够本身测试。若是找到其余优化的方法也记得和我说下