紫水晶编程技术论坛 - 努力打造成全国最好的编程论坛

 找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
查看: 7009|回复: 4

[分享] vs2010 vc6 编译体积优化

  [复制链接]

1214

主题

1566

帖子

11

精华

管理员

菜鸟

Rank: 125Rank: 125Rank: 125Rank: 125Rank: 125

积分
93743

贡献奖关注奖人气王精英奖乐于助人勋章

发表于 2011-1-5 08:54:42 | 显示全部楼层 |阅读模式
VC写的程序体积是挺大的,网上也有很多优化的文章,都是针对VC6.0来说的。我把我的总结下。

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

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

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/whitehack/archive/2011/01/01/6111801.aspx
【VB】QQ群:1422505加的请打上VB好友
【易语言】QQ群:9531809  或 177048
【FOXPRO】QQ群:6580324  或 33659603
【C/C++/VC】QQ群:3777552
【NiceBasic】QQ群:3703755

7

主题

43

帖子

2

精华

初来乍到

Rank: 1

积分
3171
发表于 2011-4-27 18:48:08 | 显示全部楼层
本帖最后由 lxl1638 于 2011-4-27 18:49 编辑

VC6~VC2010都可以通过
#pragma comment(lib,"msvcrt.lib")
来减小体积的,关键是要找准msvcrt.lib,
X64代码也可以用该方法。

晚些再找找代码传上来。

5

主题

73

帖子

2

精华

钻石会员

Rank: 6Rank: 6

积分
2738
QQ
发表于 2011-5-12 22:56:33 | 显示全部楼层
..这些问题都不大吧。写对话框用WTL写就是了
静态编译才70-80kb

30

主题

723

帖子

0

精华

钻石会员

Rank: 6Rank: 6

积分
2815
发表于 2015-10-21 09:36:41 | 显示全部楼层
和易语言比 真的不是很大了

0

主题

16

帖子

0

精华

铜牌会员

Rank: 2Rank: 2

积分
46
发表于 2017-3-11 21:35:53 | 显示全部楼层
感谢分享
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

手机版|Archiver|紫水晶工作室 ( 粤ICP备05020336号 )

GMT+8, 2024-3-29 20:26 , Processed in 0.028701 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表