Статическая библиотека режима выпуска намного больше, чем версия режима отладки

Сегодня я обнаружил, что скомпилированная статическая библиотека, над которой я работаю, намного больше в режиме Release, чем в Debug. Я нашел это очень удивительным, поскольку в большинстве случаев происходит прямо противоположное (насколько я могу судить).

Размер в режиме отладки немного превышает 3 МБ (это довольно большой проект), но в выпуске он увеличивается до 6,5 МБ. Может кто подскажет, в чем может быть причина этого? Я использую обычные настройки Visual Studio (2008) для проекта статической библиотеки, почти ничего не изменил в настройках конфигурации сборки. В выпуске я использую / O2, а для параметра «Размер или скорость предпочтения» установлено значение «Ни то, ни другое». Может ли / O2 («Максимизировать скорость») конечный .lib быть намного больше, чем отладочная версия со всей отладочной информацией в ней?

РЕДАКТИРОВАТЬ: Дополнительная информация:
Отладка:
- оптимизация всей программы: Нет
- включить связывание на уровне функций: Нет

Выпуск:
- Оптимизация всей программы: Включить генерацию кода во время компоновки
- Включить компоновку на уровне функций: Да


person PeterK    schedule 23.06.2010    source источник
comment
Как насчет оптимизации всей программы и настроек связывания на уровне функций в обеих конфигурациях?   -  person sharptooth    schedule 23.06.2010


Ответы (3)


Разница, в частности, связана с генерацией кода во время компоновки. Прочтите главу «Генерация кода во время компоновки» в Компиляторы - что каждый программист должен знать об оптимизации компилятора в MSDN - в основном говорится, что при включенном LTCG компилятор производит гораздо больше данных, которые упаковываются в статическую библиотеку, так что компоновщик может использовать эти дополнительные данные для генерации лучшего машинного кода при фактическом связывании исполняемого файла.

Поскольку у вас отключен LTCG в конфигурации отладки, созданная библиотека заметно меньше, поскольку в ней нет этих дополнительных данных.

PS: Исходная ссылка (не работает на 11.09.2015)

person sharptooth    schedule 24.06.2010
comment
Спасибо, это многое объяснило! - person PeterK; 24.06.2010

Здесь может возникнуть проблема с оптимизацией, в частности, автоматически созданные inline функции будут больше, но быстрее в выпуске, чем при отладке.

person SmacL    schedule 23.06.2010

Лично я никогда не видел, чтобы PDB выпуска был больше, чем PDB отладки. То же самое и с LIB.

person Billy ONeal    schedule 23.06.2010