/LTCG (Создание кода во время ссылки)

Используется /LTCG для выполнения оптимизации всей программы или создания инструментирования по профилю (PGO), выполнения обучения и создания оптимизированных для профилей сборок.

Синтаксис

/LTCG[:{INCREMENTAL|NOSTATUS|STATUS|OFF}]

Эти параметры являются нерекомендуемыми начиная с 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

Свойство Кто le Program Optimization задает несколько параметров компилятора и компоновщика, в том числе/LTCG. Мы рекомендуем использовать это свойство для изменения параметров для всей конфигурации сборки. Чтобы задать Кто оптимизацию программы для проекта:

  1. Откройте диалоговое окно Окна свойств проекта. Дополнительные сведения см. в разделе Set компилятора и свойств сборки.

  2. Перейдите на страницу свойств Свойства конфигурации>Общие.

  3. Измените свойство Оптимизация всей программы . Нажмите кнопку "ОК" или "Применить", чтобы сохранить изменения.

Вы также можете применить /LTCG к конкретным сборкам, выбрав "Руководство по оптимизации профиля">в строке меню или выбрав один из параметров интерактивной оптимизации профиля в контекстном меню проекта.

Чтобы включить создание кода времени связи отдельно или задать определенный параметр создания кода времени связи:

  1. Откройте диалоговое окно Окна свойств проекта.

  2. Выберите страницу свойств оптимизации компоновщика>конфигурации.>

  3. Измените свойство создания кода времени связи на один из следующих параметров:

    • По умолчанию
    • Использование создания кода времени быстрого канала (LTCG:добавочное)
    • Использование создания кода времени связи (LTCG)
    • Интерактивная оптимизация профиля — инструмент (LTCG:PGInstrument)
    • Оптимизация профиля (LTCG:PGOptimize)
    • Оптимизация профиля — обновление (LTCG:PGUpdate)
  4. Нажмите кнопку "ОК" или "Применить", чтобы сохранить изменения.

Чтобы указать, отображает ли компоновщик индикатор хода выполнения для создания кода времени связывания:

  1. Откройте диалоговое окно Окна свойств проекта.

  2. Выберите страницу свойств>компоновщика>конфигурации "Общие свойства".

  3. Измените свойство "Состояние ссылки". Нажмите кнопку "ОК" или "Применить", чтобы сохранить изменения.

Установка данного параметра компилятора программным способом

См. также

Справочник по компоновщику MSVC
Параметры компоновщика MSVC