Статическая библиотека режима выпуска намного больше, чем версия режима отладки
-
29-09-2019 - |
Вопрос
сегодня я узнал, что сборная статическая библиотека, над которой я работаю, намного больше Выпуск Режим, чем внутри Отлаживать. Анкет Я нашел это очень удивительным, так как большую часть времени точное противоположность происходит (насколько я могу сказать).
Размер в режиме отладки немного более 3 МБ (его довольно большой проект), но в релизе он достигает 6,5 МБ. Кто -нибудь может сказать мне, что может быть причиной этого? Я использую обычные настройки Visual Studio (2008) для проекта статической библиотеки, почти ничего не изменив в настройках конфигурации сборки. В выпуске я использую /o2, и «размер или скорость предпочтения» установлен на «ни" ни ". Может ли /o2 («максимизировать скорость») привести к тому, что окончательный .LIB намного больше, чем версия отладки со всей информацией о отладке?
РЕДАКТИРОВАТЬ:Дополнительная информация:
Отлаживать:
- Оптимизация всей программы: нет
- Включить уровень функционального уровня: нет
Выпуск:
- Все оптимизация программы: включить генерацию кода
- Включить уровень функции, связывание: Да
Решение
Разница конкретно из-за генерации кода времени ссылки. Прочитайте генерацию кода ссылки на ссылку на Компиляторы - что каждый программист должен знать об оптимизации компилятора На MSDN - в основном говорится, что с LTCG, включенным компилятором, производит гораздо больше данных, которые упакованы в статическую библиотеку, так что линкер может использовать эти дополнительные данные для создания лучшего машинного кода при фактическом связывании исполняемого файла.
Поскольку у вас есть LTCG в конфигурации отладки, созданная библиотека заметно меньше, поскольку в ней нет дополнительных данных.
Другие советы
Оптимизация может быть проблемой здесь, особенно автоматически создана inline
Функции будут больше, но быстрее в выпуске, чем отладка.
Лично я никогда не видел, как выпуск PDB не будет больше, чем отладка PDB. Та же дело для Libs.