/LTCG
(Создание кода во время ссылки)
Используется /LTCG
для выполнения оптимизации всей программы или создания инструментирования по профилю (PGO), выполнения обучения и создания оптимизированных для профилей сборок.
Синтаксис
/LTCG
[:
{INCREMENTAL
STATUS
OFF
|NOSTATUS
||}]
Эти параметры являются нерекомендуемыми начиная с Visual Studio 2015:
/LTCG:
{PGINSTRUMENT
||PGOPTIMIZE
PGUPDATE
}
Аргументы
INCREMENTAL
(Необязательно) Указывает, что компоновщик применяет только всю оптимизацию программы или создание кода времени ссылки (LTCG) к файлам, затронутым изменением, а не ко всему проекту. По умолчанию этот флаг не задан при /LTCG
указании, и весь проект связан с помощью всей оптимизации программы.
NOSTATUS
| STATUS
(Необязательно) Указывает, отображает ли компоновщик индикатор хода выполнения, который показывает процент завершения компоновки. По умолчанию эти сведения о состоянии не отображаются.
OFF
(Необязательно) Отключает создание кода во время компоновки. Компоновщик обрабатывает все модули, скомпилированные с /GL
таким параметром, как если бы они компилировались без этого параметра, и любые модули MSIL вызывают сбой ссылки.
PGINSTRUMENT
(Необязательно) Этот параметр является нерекомендуемым начиная с Visual Studio 2015. Вместо этого используйте /LTCG
и /GENPROFILE
создайте /FASTGENPROFILE
инструментированную сборку для оптимизации с помощью профиля. Данные, собранные из инструментированных запусков, используются для создания оптимизированного образа. Дополнительные сведения см. в статье Профильные оптимизации. Короткая форма этого параметра /LTCG:PGI
.
PGOPTIMIZE
(Необязательно) Этот параметр является нерекомендуемым начиная с Visual Studio 2015. Вместо этого используйте /LTCG
и /USEPROFILE
создайте оптимизированный образ. Дополнительные сведения см. в статье Профильные оптимизации. Короткая форма этого параметра /LTCG:PGO
.
PGUPDATE
(Необязательно) Этот параметр является нерекомендуемым начиная с Visual Studio 2015. Вместо этого используйте /LTCG
и /USEPROFILE
перестроите оптимизированный образ. Дополнительные сведения см. в статье Профильные оптимизации. Короткая форма этого параметра /LTCG:PGU
.
Замечания
Параметр /LTCG
сообщает компоновщику вызывать компилятора и выполнять оптимизацию всей программы. Вы можете также выполнить профильную оптимизацию. Дополнительные сведения см. в статье Профильные оптимизации.
При следующих исключениях невозможно добавить параметры компоновщика в комбинацию PGO и /USEPROFILE
которые не были указаны в предыдущем сочетании /LTCG
/LTCG
инициализации PGO:/GENPROFILE
Все параметры компоновщика, указанные вместе с /LTCG
параметрами /GENPROFILE
инициализации PGO, не должны быть указаны при сборке с помощью /LTCG
и /USEPROFILE
; они подразумеваются.
Остальная часть этой статьи описывает создание кода во время ссылки, выполняемого с помощью /LTCG
.
/LTCG
подразумевается с /GL
.
Компоновщик вызывает создание кода во время ссылки, если он прошел модуль, скомпилированный с помощью /GL
или модулем MSIL (см .netmodule
. файлы как входные данные компоновщика). Если вы явно не указываете /LTCG
при передаче /GL
или модуле MSIL компоновщику, компоновщик в конечном итоге обнаруживает эту ситуацию и перезапускает ссылку с помощью /LTCG
. Явно укажите /LTCG
, когда вы передаете /GL
модули MSIL компоновщику для максимально быстрой производительности сборки.
Для повышения производительности используйте /LTCG:INCREMENTAL
. Этот параметр сообщает компоновщику повторно использовать только файлы, затронутые изменением исходного файла, вместо всего проекта. Этот параметр может значительно сократить необходимое время связи. Этот параметр не совпадает с параметром добавочного связывания. При удалении /LTCG:INCREMENTAL
параметра также удалите любой /LTCGOUT
вариант для улучшения времени сборки и использования дисков.
/LTCG
недопустимо для использования с /INCREMENTAL
.
Если /LTCG
используется для связывания модулей, скомпилированных с помощью /Og
, /O1
/O2
или/Ox
, выполняются следующие оптимизации:
кроссмодульное встраивание;
межпроцедурное распределение регистров (только 64-разрядные операционные системы);
пользовательское соглашение об именовании (только x86)
небольшое смещение TLS (только x86);
двойное выравнивание стека (только x86);
улучшенное устранение неоднозначности памяти (более подробные данные о конфликтах для глобальных переменных и входных параметров).
Примечание.
Компоновщик определяет, какие оптимизации использовались для компиляции каждой функции, и применяет те же оптимизации во время компоновки.
Использование /LTCG
и /O2
причина оптимизации двойного выравнивания.
Если /LTCG
и /O1
заданы, двойное выравнивание не выполняется. Если большинство функций в приложении компилируются для скорости, с несколькими функциями, скомпилированных для размера (например, с помощью optimize
pragma), компилятор дважды выравнивает функции, оптимизированные для размера, если они вызывают функции, требующие двойного выравнивания.
Если компилятор может определить все сайты вызовов функции, компилятор игнорирует явные модификаторы соглашения о вызовах и пытается оптимизировать соглашение о вызовах функции:
передает параметры в регистраторах;
переупорядочивает параметры для выравнивания;
удаляет неиспользуемые параметры.
Если функция вызывается с помощью указателя функции или вызывается из-за пределов модуля, скомпилированного с помощью /GL
, компилятор не пытается оптимизировать соглашение о вызове функции.
Примечание.
При использовании /LTCG
и переопределении mainCRTStartup
приложение может иметь непредсказуемое поведение, связанное с пользовательским кодом, выполняемым до инициализации глобальных объектов. Существует три способа решить эту проблему: не переопределить mainCRTStartup
, не компилировать файл, содержащийся mainCRTStartup
с помощью, /LTCG
или инициализировать глобальные переменные и объекты статически.
/LTCG
Модули MSIL и MSIL
Модули, скомпилированные с помощью и /GL
/clr
которые могут использоваться в качестве входных данных компоновщика при /LTCG
указании.
/LTCG
может принимать собственные файлы объектов и смешанные собственные и управляемые файлы объектов (скомпилированные с помощью/clr
)./clr:safe
Параметры/clr:pure
компилятора устарели в Visual Studio 2015 и не поддерживаются в Visual Studio 2017 и более поздних версиях./LTCG:PGI
не принимает собственные модули, скомпилированные с помощью и/GL
/clr
Установка данного параметра компилятора в среде разработки Visual Studio
Свойство "Оптимизация всей программы" задает несколько параметров компилятора и компоновщика, в том числе /LTCG
. Мы рекомендуем использовать это свойство для изменения параметров для всей конфигурации сборки. Чтобы задать оптимизацию всей программы для проекта, выполните приведенные действия.
Откройте диалоговое окно Окна свойств проекта. Дополнительные сведения см. в разделе Set компилятора и свойств сборки.
Перейдите на страницу свойств Свойства конфигурации>Общие.
Измените свойство Оптимизация всей программы . Нажмите кнопку "ОК" или "Применить", чтобы сохранить изменения.
Вы также можете применить /LTCG
к конкретным сборкам, выбрав "Руководство по оптимизации профиля">в строке меню или выбрав один из параметров интерактивной оптимизации профиля в контекстном меню проекта.
Чтобы включить создание кода времени связи отдельно или задать определенный параметр создания кода времени связи:
Откройте диалоговое окно Окна свойств проекта.
Выберите страницу свойств оптимизации компоновщика>конфигурации.>
Измените свойство создания кода времени связи на один из следующих параметров:
- По умолчанию
- Использование создания кода времени быстрого канала (LTCG:добавочное)
- Использование создания кода времени связи (LTCG)
- Интерактивная оптимизация профиля — инструмент (LTCG:PGInstrument)
- Оптимизация профиля (LTCG:PGOptimize)
- Оптимизация профиля — обновление (LTCG:PGUpdate)
Нажмите кнопку "ОК" или "Применить", чтобы сохранить изменения.
Чтобы указать, отображает ли компоновщик индикатор хода выполнения для создания кода времени связывания:
Откройте диалоговое окно Окна свойств проекта.
Выберите страницу свойств>компоновщика>конфигурации "Общие свойства".
Измените свойство "Состояние ссылки". Нажмите кнопку "ОК" или "Применить", чтобы сохранить изменения.
Установка данного параметра компилятора программным способом
- См. раздел LinkTimeCodeGeneration.