我是C++开发人员并使用Visual Studio 2008.如何减少*.obj文件大小?我已经读过为什么我的visual studio .obj文件与输出.exe文件相比大小很大?但没有找到答案.
当我将项目构建到静态库时,所有*.obj文件的总大小为513Mb,结果lib为534Mb.每个obj文件是1-13Mb.调试exe文件是11Mb.链接时代码生成(/ Gm)已关闭.
提前致谢.
由于大量重复的代码和符号放在多个目标文件中,因此目标文件往往会变大.通常,这是由内联函数和实例化模板代码的副本引起的.
由此产生的可执行文件比所有目标文件的总和小得多,因为可以丢弃重复的弱符号和未引用的符号.
就个人而言,我不担心对象文件的大小,但如果你想减少它,那么最小化内联函数的使用,并考虑将模板代码保存在与其他代码不同的文件中,并使用显式实例化只在一个生成所需的实例化地点.
例
假设您在头文件中有这个.
template< class T > inline void F( T* t ) { // ... some code }
如果对少数几种类型使用F,则每个翻译单元都会为其使用的类型生成函数的副本.
如果你只用声明替换它:
template< class T > void F( T* t );
然后,您可以在单独的源文件中生成所需的即时消息:
template< class T > void F( T* t ) { // definition } template void F< int >( int* ); template void F< char >( char* ); template void F< MyType >( MyType* );
当然,您现在必须手动管理需要模板实例化的类型.