调整编译和连接参数去除目标程序中的无用代码

本文介绍了如何在MSVC环境下通过编译器和连接器参数减少目标程序中无用代码,以减小exe文件大小。通过添加/Gy、/PACKFUNCTIONS、/PACKCODE(针对MSVC 1.5)或/OPT:REF(针对Visual Studio 2003及更高版本)等参数,可以在函数级别实现代码优化和压缩。对于IDE用户,可以在项目属性中调整这些设置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

环境  MSVC 1.5

在一个多人维护的项目中,可能会存在一些实际上没有被调用的函数,比如下面这个例子:
int main(int argc, char **argv)
{
    
return 0;
}


void the_func(void)
{
    ....
}

在程序流程中没有使用到the_func()函数,但在默认的编译连接中,最终的可执行文件中会出现它的代码,因此造成了exe文件增大,而这种增大显然是很不必要的。
为了避免这种浪费,最实际的办法就是利用编译器提供的优化来达到减小目标程序的目的。

具体的操作方法是,在编译时(cl.exe),添加参数 /Gy (Enable Function-Level Linking)。
然后在连接时在函数级别上进行压缩,具体的参数是 /PACKFUNCTIONS和/PACKCODE。

另外,如果你编译的是EXE可执行文件,可以添加参数/EXEPACK进行额外的压缩。

以上说的都是MSVC 1.5环境下的优化,对于更高版本的VC,以Visual Studio 2003为例,CL.EXE的参数不变,
LINK.EXE的参数改成/OPT:REF。如果使用IDE开发环境,那在项目属性中修改相关选项即可。

在MSDN中对参数/Gy还有如下描述:
The /Z7, /Zi, /ZI (Debug Information Format) option, used for Edit and Continue, automatically sets the /Gy option.

参考网址:
http://msdn2.microsoft.com/en-us/library/bxwfs976.aspx
http://msdn2.microsoft.com/en-us/library/xsa71f43.aspx
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值