Статическая библиотека режима выпуска намного больше, чем версия режима отладки - PullRequest
19 голосов
/ 23 июня 2010

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

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

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

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

Ответы [ 3 ]

30 голосов
/ 24 июня 2010

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

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

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

1 голос
/ 23 июня 2010

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

0 голосов
/ 23 июня 2010

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

...