Параметр /LTCG (создание кода во время компоновки)
Обновлен: Ноябрь 2007
/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 принимает безопасные файлы NETMODULES, которые могут создаваться с помощью параметра /clr:safe /LN в Visual C++ и параметра /target:module в любом другом компиляторе Visual Studio. NETMODULES-файлы, созданные с использованием параметра /clr или /clr:pure недопустимы для параметра /LTCG.
На этапе /LTCG:PGI не принимаются неуправляемые модули, скомпилированные с параметрами /GL и /clr, а также чистые модули (/clr:pure).
Установка параметра компилятора в среде разработки Visual Studio
Откройте диалоговое окно Страницы свойств проекта. Дополнительные сведения см. в разделе Изменение параметров проекта.
Выберите папку Свойства конфигурации.
Выберите страницу свойств Общие.
Измените значение свойства Оптимизация всей программы.
Чтобы применить параметр /LTCG к конкретным сборкам, в меню "Построение" выберите команду "Ведомая профилем оптимизация". Также можно щелкнуть правой кнопкой мыши имя проекта в обозревателе решений и выбрать один из параметров в разделе "Ведомая профилем оптимизация".
Установка данного параметра компилятора программным способом
- См. описание свойства WholeProgramOptimization.