Это позволяет компоновщику выполнять фактическую компиляцию кода, и, следовательно, он может выполнять дополнительную оптимизацию, такую как вставка.
Если вы не используете LTCG, компилятор является единственным компонентом в процессе сборки, который может встроить функцию, например, заменить «вызов» функции содержимым функции, что обычно происходит намного быстрее. , В любом случае компилятор будет делать это только для функций, в которых это дает улучшение.
Поэтому он может делать это только с функциями, для которых он имеет тело. Это означает, что если функция в файле cpp вызывает другую функцию, которая не реализована в том же файле cpp (или в заголовочном файле, который включен), то она не имеет фактического тела функции и поэтому не может встроить ее .
Но если вы используете LTCG, это компоновщик, который выполняет встраивание, и он имеет все функции во всех файлах cpp всего проекта, за исключением ссылочных файлов lib, которые не были созданы с помощью LTCG. Это дает компоновщику (который становится компилятором) гораздо больше возможностей для работы.
Но это также увеличивает длительность сборки, особенно при внесении дополнительных изменений. Возможно, вы захотите включить LTCG в своей конфигурации сборки релиза.
Обратите внимание, что LTCG - это не то же самое, что оптимизация по профилю.