Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Используется /LTCG для выполнения оптимизации всей программы или создания инструментирования по профилю (PGO), выполнения обучения и создания оптимизированных для профилей сборок.
Синтаксис
/LTCG[:{INCREMENTALSTATUSOFF|NOSTATUS||}]
Эти параметры являются нерекомендуемыми начиная с Visual Studio 2015:
/LTCG:{PGINSTRUMENT||PGOPTIMIZEPGUPDATE}
Аргументы
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.