VS2008 影响程序大小和速度的选项

下面要说的,都是默认值是release的,debug版本一般不需要调选项。

 

项目 - 属性 - 配置属性 - C/C++

【优化】: 
通常,算法程序选择最大化速度(/O2),界面程序选择最小化大小(/O1),可以获得最佳的效果。 
优选大小或速度,只有在使用完全优化(/Ox)时才有效。完全优化一般不推荐使用,用处就是可以生成速度与/O2基本相当,但是体积更小的代码(选速度优先的话)。其他几个选项实际上已包含在/O1、/O2之中,具体请看MSDN。 

【代码生成】: 
1、启用字符串池(/GF),会将相同的字符串合并,当然可以减小空间占用,虽然本项目默认没有打开,但是默认的/Zi选项会自动打开/GF,这里打不打开一样。 
2、启用C++异常:该项默认打开,在C++项目中(比如MFC中),会大大增加程序体积,增加约30%,关闭并不代表try不能用了,但会一定程度上降低健壮性,对于空间要求较高的程序,建议关闭。对于正式项目,请参见MSDN,看看会不会造成不利影响。 
3、运行库:默认多线程DLL(/MD),体积最优的方案,如果对方没有VS运行时库,选择/MT会将C/C++运行库静态编译,体积增加不少。 一般release版本都是使用MD方案,debug版本使用的是MDd。
4、缓冲区安全检查:关闭的话,减少0.5K~1K体积(默认情况,VC的段长度512字节,因此程序体积变化的最小单位是0.5K)。 
5、启用增强指令集:真想用SSE3的话去用Intel C++,VS2008只支持到SSE2,而且,在我的机器上貌似使用默认设置就能达到选择SSE2的相同速度,如果安装了Intel C++ 11,可集成与VS2008,同样的地方选择SSE3效果超群。 
6、浮点模型:精确还是快速理论上肯定对速度有影响。默认是选择精确(/fp:precise)

【高级】: 
编译为C还是C++影响不大,这充分说明了C++简单面向对象特性和C效率差不多(如重载,默认情况下,编译器会检查扩展名决定目标代码类型,对于cpp文件,所有的函数都会编译为可重载的类型,但是对效率几乎没有影响)。 


项目 - 属性 - 配置属性 - 链接器
【输入】: 
忽略库只有在库冲突时候才有用,VC绝对不会连接没有调用到的库,哪怕你明确指定了。 

【清单文件】: 
完全使用API编程可以不生成清单。减少约1K体积。 一般情况下,关闭UAC的那一项,可减少0.5K。 

【调试】: 
关闭“生成调试信息(/DEBUG)”,根据程序规模,可减少1K~几十K。 

【优化】: 

release模式,默认情况下已经该组已经最优了,/OPT:REF和/OPT:ICF已经打开,注意,VS2005、VS2008中Windows 98优化那一项没用,不像VC6取消Windows 98优化可以大大减小体积。因为VS2005、VS2008中段大小已经是512字节,VC6默认4K。 

【高级】: 

指定入口点,可以大大减小程序体积,但是不调用CRT的入口无法自动处理参数,可用GetCommandLine和CommandLineToArgvW这两个API来处理参数。 

 

【随机基址】:

默认模式启用映像随机化(/DYNAMICBASE),会大大增加程序体积,因为这是个增加程序防反编译、防破解能力的选项。如无需求,请选择禁用映像随机化(/DYNAMICBASE:NO),文件越大,体积缩小越明显,至少30%。 

【命令行】: 

小程序,可以指定段大小/ALIGN,/O1编译的化最小可以使用/ALIGN:4,这个选项不推荐,第一有点规模的程序就不能用太小的段,/O2优化的也不能用小段,而且默认的512字节段可以使用UPX压缩,再小就不能了,除非咱们编译那种600字节的Hello World,这个选项意义不大,因此微软才没有给他一个图形选项。 同样,编译600字节hello world还需要/merge合并段选项,同样不推荐使用。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hellokandy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值