设为首页 加入收藏

TOP

vs2010 vc6 编译体积优化
2015-01-25 00:26:00 来源: 作者: 【 】 浏览:200
Tags:vs2010 vc6 编译 体积 优化

?

VC写的程序体积是挺大的,网上也有很多优化的文章,都是针对VC6.0来说的。我把我的总结下。

?

#include

#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,所以体积不会增加的,这个时候加不加这句话都无所谓。

?

#pragma comment(linker, "/SUBSYSTEM:windows")

?

这句是用来说明是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#include <windows.h>

#pragma comment(lib,"kernel32.lib")

#pragma comment(lib,"user32.lib")

#pragma comment(linker, "/SUBSYSTEM:windows")

#pragma comment(linker, "/ENTRY:main")

?

int main()

{

??? MessageBox(NULL, TEXT("hello!"), TEXT("hi"), 0) ;

??? return 0 ;

}

?

?

www.2cto.com

?

?

?

?

这段代码使用VS2010编译后体积也只有3K。其他一些优化,对体积的影响不明显,基本可以忽略不计。不过大家有兴趣的话,可以自己测试。如果找到其他优化的方法也记得和我说下。

?

?

?

(转自Rover12421? Blog)

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇TFS 无法使用,显示 "No Com.. 下一篇设置进程路径为启动路径

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: