我是一名 C++ 开发人员,使用的是 Visual Studio 2008。 如何减小 *.obj 文件的大小? 我读过 why are my visual studio .obj files are massive in size compared to the output .exe?但没有找到答案。
当我将项目构建为静态库时,所有 *.obj 文件的总大小为 513Mb,生成的库为 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* );
当然,您现在必须手动管理哪些类型需要模板实例化。
关于c++ - VisualStudio *.obj 文件大小(513Mb objs 和 534Mb lib),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/415941/