сегодня я узнал, что скомпилированная статическая библиотека, я продолжаю работать, является намного более крупной в режиме Release, чем в Отладке. Я нашел это очень удивительным, с большей части времени полная противоположность происходит (насколько я могу сказать).
Размер в режиме отладки составляет немного более чем 3 МБ (довольно крупный проект), но в выпуске он подходит к 6,5 МБ. Кто-то может сказать мне, какова могла быть причина этого? Я использую обычные настройки Visual Studio (2008) для статического проекта библиотеки, почти ничего не изменил в настройках конфигурации сборки. В выпуске я использую/O2 и "Размер пользы, или скорость" не установлена ни на "Одного". Мог/O2 ("Максимизируют скорость"), заставляют финал .lib быть настолько более крупным, чем отладочная версия со всей информацией об отладке в нем?
Править: Дополнительная информация:
Отладка:
- целая оптимизация программы: Нет
- включите связывание на уровне функций: Нет
Выпуск:
- целая оптимизация программы: Включите разовую ссылкой генерацию кода
- включите связывание на уровне функций: Да
Разница, в частности, связана с генерацией кода во время компоновки. Прочтите главу «Генерация кода во время компоновки» в Компиляторы - что каждый программист должен знать об оптимизации компилятора на MSDN - в основном говорится, что с включенным LTCG компилятор производит гораздо больше данных, которые упаковываются в статическую библиотеку, поэтому что компоновщик может использовать эти дополнительные данные для генерации лучшего машинного кода при фактическом связывании исполняемого файла.
Поскольку у вас отключен LTCG в конфигурации отладки, созданная библиотека заметно меньше, поскольку в ней нет этих дополнительных данных.
Лично я никогда не видел, чтобы релизная PDB была больше отладочной PDB. То же самое касается LIBов.
Оптимизация может быть здесь проблемой, особенно автоматически созданные встроенные
функции будут больше, но быстрее в выпуске, чем отладка.