Подтвердить что ты не робот

Режим статической библиотеки релиза намного больше, чем версия режима отладки

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

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

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

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

4b9b3361

Ответ 1

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

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

PS: Оригинальная ссылка (не работает в 11/09/2015)

Ответ 2

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

Ответ 3

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