Параметр /LTCG (создание кода во время компоновки)

/LTCG[:NOSTATUS|:STATUS|:PGINSTRUMENT|:PGOPTIMIZE|:PGUPDATE]

Заметки

Здесь:

  • :NOSTATUS | :STATUS (необязательно)
    Определяет отображение или скрытие индикатора хода выполнения компоновки. По умолчанию сведения о состоянии не отображаются.

  • :PGINSTRUMENT (необязательно)
    Определяет создание в процессе компоновки PGD-файла, который используется для подготовки к инструментированному тестовому запуску приложения. При необходимости можно задать параметр /PGD, определяющий создание PGD-файла с отличными от используемых по умолчанию именем и расположением.

    Данные, собранные по результатам инструментированного выполнения, используются для оптимизации образа. Дополнительные сведения см. в разделе Профильная оптимизация. В краткой форме параметр записывается как /LTCG:PGI.

  • :PGOPTIMIZE (необязательно)
    Определяет необходимость использования данных профиля, который создается после инструментированного выполнения двоичного файла, для оптимизации образа компоновщиком. Все входные файлы должны быть идентичны файлам, указанным в на этапе /LTCG:PGI. Дополнительные сведения см. в разделе Профильная оптимизация. В краткой форме параметр записывается как /LTCG:PGO.

  • :PGUPDATE (необязательно)
    Предоставляет список входных файлов, добавляемых или изменяемых по сравнению с этапом :PGINSTRUMENT. Профильная оптимизация новых входных файлов не выполняется. Также не выполняется профильная оптимизация измененных частей входных файлов, которые делают недействительными данные профиля, собранные на этапе инструментирования кода. Дополнительные сведения см. в разделе Профильная оптимизация. В краткой форме параметр записывается как /LTCG:PGU.

Заметки

Параметр /LTCG задает вызов компилятора из компоновщика и выполнение оптимизации всей программ. Также можно выполнить профильную оптимизацию. Дополнительные сведения см. в разделе Профильная оптимизация.

На этапах /LTCG:PGOPTIMIZE или /LTCG:PGUPDATE нельзя добавлять дополнительные параметры компоновщика, которые не были добавлены на этапе /LTCG:PGINSTRUMENT, за исключением следующих параметров:

Любые параметры компоновщика, установленные на этапе /LTCG:PGINSTRUMENT, считаются заданными и не требуют установки на этапе /LTCG:PGOPTIMIZE.

В оставшейся части раздела рассматривается использование параметра /LTCG при создании кода во время компоновки.

Параметр /LTCG подразумевается установленным при использовании параметра /GL.

Вызов функции создания кода во время компоновки осуществляется при передаче компоновщику модуля, скомпилированного с использованием параметра /GL, или модуля MSIL (дополнительные сведения см. в разделе .NETMODULE-файлы в качестве входных файлов компоновщика). Если параметр /LTCG не задан явно при передаче компоновщику модулей, скомпилированных с параметром /GL, или модулей MSIL, компоновка выполняется повторно с использованием параметра /LTCG. Чтобы повысить производительность построения, явно задайте параметр /LTCG при передаче модулей /GL и MSIL компоновщику.

Использование параметра /LTCG совместно с /INCREMENTAL не допускается.

При использовании /LTCG с параметрами /Og, /O1, /O2 или /Ox выполняются следующие оптимизации:

  • Межмодульное встраивание

  • Межпроцедурное распределение памяти регистров (только в 64-разрядных операционных системах)

  • Пользовательское соглашение о вызове (только платформа x86)

  • Смещение малых регистров TLS (только платформа x86)

  • Двойное выравнивание стека (только платформа x86)

  • Разрешение конфликтов обращения к памяти (более точные сведения о конфликтах глобальных переменных и входных параметров)

Одновременное использование параметров /LTCG и /Ogt приведет к оптимизации с применением двойного выравнивания.

При одновременном использовании параметров /LTCG и /Ogs двойное выравнивание не выполняется. Если большая часть функций компилируется в целях повышения производительности, компилятор выполняет двойное выравнивание оптимизируемых в целях уменьшения размера функций (например с помощью директивы pragma optimize), в которых вызываются функции, требующие двойного выравнивания.

Если при компиляции удается определить все места вызова функции, модификаторы соглашений о явном вызове функции игнорируются, и выполняется попытка оптимизации соглашения о вызове функции:

  • Передача параметров в регистры

  • Изменение порядка параметров для выравнивания

  • Удаление неиспользуемых параметров

Если функция вызывается с помощью указателя или вне модуля, скомпилированного с параметром /GL, оптимизация соглашения о вызове функции не выполняется.

Примечание

Если в приложении задан параметр /LTCG и переопределена функция mainCRTStartup, его поведение при выполнении пользовательского кода до инициализации глобальных объектов становится непредсказуемым.Существует три способа устранения этой проблемы: не переопределяйте функцию mainCRTStartup, не компилируйте содержащий функцию mainCRTStartup файл с параметром /LTCG, по возможности не инициализируйте глобальные переменные и объекты статически.

Модули /LTCG и MSIL

Модули, скомпилированные с параметрами /GL и /clr, могут передаваться в качестве входных модулей компоновщика при заданном параметре /LTCG:

  • Параметр /LTCG принимает неуправляемые, смешанные (содержат как неуправляемый, так и управляемый код; компилируются с параметром /clr), чистые (компилируются с параметром /clr:pure), а также безопасные (компилируются с параметром /clr:safe) объектные файлы.

  • Параметр /LTCG принимает безопасные NETMODULE- файлы, которые могут создаваться с помощью параметра /clr:safe /LN в Visual C++ и параметра /target:module в любом другом компиляторе Visual Studio. . NETMODULES-файлы, созданные с использованием параметра /clr или /clr:pure недопустимы для параметра /LTCG.

  • На этапе /LTCG:PGI не принимаются неуправляемые модули, скомпилированные с параметрами /GL и /clr, а также чистые модули (/clr:pure).

Установка параметра компилятора в среде разработки Visual Studio

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

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

  3. Выберите страницу свойств Общие.

  4. Измените значение свойства Оптимизация всей программы.

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

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

См. также

Ссылки

Настройка параметров компоновщика

Параметры компоновщика