Я разработчик на C++ и использую Visual Studio 2008. Как уменьшить размер файлов * .obj? Я прочитал Почему мои файлы Visual Studio .obj имеют огромный размер по сравнению с выходным .exe?, но не нашел ответа.
Когда я создаю проект в статической библиотеке, общий размер всех файлов * .obj составляет 513 МБ, а итоговая библиотека - 534 МБ. Размер каждого obj-файла составляет 1-13Мб. Размер исполняемого файла отладки составляет 11Мб. Генерация кода времени компоновки (/ 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* );
Конечно, теперь вам нужно вручную указать, для каких типов вам нужно создать экземпляр шаблона.
Что вы имеете в виду «использование явного создания экземпляров для создания требуемых экземпляров только в одном месте»?