环境 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
在一个多人维护的项目中,可能会存在一些实际上没有被调用的函数,比如下面这个例子:










在程序流程中没有使用到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