Каковы недостатки / подводные камни ОТКАЗА от использования «Оптимизации всей программы» / GL и «Генерации кода времени ссылки» / LTCG

#c #visual-studio #static-libraries

#c #visual-studio #статические библиотеки

Вопрос:

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

  1. Включение «Оптимизации всей программы» /GL и «Генерации кода времени ссылки» /LTCG и ограничение сборки выпуска моей платформы для использования (из коробки) с одной конкретной версией набора инструментов платформы (скажем, «Visual Studio 2017 (v141)»).). Попытка создать фреймворк в Visual Studio 2019 (v142) с использованием готовых библиотек v141 приводит к появлению сообщения об ошибке типа «[…] был создан с более старым компилятором, чем другие объекты; перестройте старые объекты и библиотеки» для сборки выпуска. Единственный вариант здесь — перестроить библиотеки с v142, но тогда они больше не могут использоваться с v141.
  2. Отключение /GL и /LTCG для библиотек, что приводит к тому, что их можно использовать со многими наборами инструментов для разных платформ, т. Е. v141, v142 и другими.

Мой вопрос: есть ли у второго варианта какие-либо недостатки или скрытые подводные камни, или это допустимый способ? Что, если во время выполнения происходит огромное количество обращений к библиотекам? Могут ли быть проблемы с производительностью?

Комментарии:

1. LTCG — это функция повышения производительности (много для некоторых программ, очень мало для других программ). Недостатком отказа от его использования является то, что вы не получаете улучшения производительности, которое он может принести.

2. Какие улучшения производительности это может быть? Код, который может быть встроен в LTCG или что-то в этом роде?