Параметр /OPT (оптимизация)

Управляет оптимизацией, выполняемой во время сборки с помощью программы LINK.

/OPT:{REF | NOREF}
/OPT:{ICF[=iterations] | NOICF}
/OPT:{LBR | NOLBR}

Аргументы

  • REF | NOREF
    Параметр /OPT:REF удаляет функции и/или данные, на которые никогда не приводятся ссылки, в то время как параметр /OPT:NOREF хранит такие функции и/или данные.

    Если параметр /OFT:REF включен, программа LINK удаляет неиспользуемые упакованные функции и данные. Объект содержит упакованные функции и данные (COMDAT), если он был скомпилирован с параметром /Gy. Такой способ оптимизации называется транзитивным исключением функций COMDAT. По умолчанию параметр /OPT:REF включен для сборок, не предназначенных для отладки. Чтобы переопределить эту настройку по умолчанию и сохранить функции COMDAT, на которые отсутствуют ссылки, используйте параметр /OPT:NOREF. Для переопределения удаления конкретного символа можно использовать параметр /INCLUDE.

    Если параметр /OPT:REF включен явно или по умолчанию, включена ограниченная форма оптимизации /OPT:ICF, при которой выполняется только свертка идентичных функций. Если требуется задать параметр /OPT:REF без параметра /OPT:ICF,необходимо указать параметр /OPT:REF,NOICF или /OPT:NOICF.

    Если задан параметр /DEBUG, по умолчанию для параметра /OPT установлено значение NOREF, и в образе сохраняются все функции. Чтобы переопределить эту настройку по умолчанию и выполнить оптимизацию отладочной сборки, используйте параметр /OPT:REF. Поскольку параметр /OPT:REF неявно подразумевает параметр /OPT:ICF, рекомендуется также указать параметр /OPT:NOICF для сохранения идентичных функций в отладочных сборках. Это упрощает чтение трассировки стека и задание точек останова в функциях, которые в противном случае были бы объединены. При использовании параметра /OPT:REF отключается инкрементная компоновка.

    Необходимо явно пометить данные const как COMDAT с помощью объявления __declspec(selectany).

    При включении параметра /OPT:ICF параметр /OPT:REF не включается автоматически.

  • ICF[= iterations ] | NOICF
    Чтобы выполнить аналогичное свертывание записей COMDAT, используйте параметр /OPT:ICF[=iterations]. Избыточные записи COMDAT можно удалить из выходных данных компоновщика. Необязательный параметр iterations определяет количество проходов символов для поиска дубликатов. По умолчанию используется значение 2. При большем числе итераций возможно обнаружение дополнительных дубликатов, появляющихся после свертывания в предыдущих итерациях.

    Если задан параметр /OPT:REF (и по умолчанию задан параметр ICF), поведение компоновщика отличается от случая, когда параметр /OPT:REF,ICF задан явным образом. Вариант параметра ICF, который включается только с одним параметром /OPT:REF, не выполняет свертку данных только для чтения, включая RDATA, PDATA и XDATA. Это приводит к уменьшению числа свертываемых функций при создании образов для x64, поскольку эти модули больше зависят от данных только для чтения (например, PDATA и XDATA). Чтобы получить полное поведение свертывания ICF, явно задайте параметр /OPT:ICF.

    Чтобы поместить функции в записи COMDAT, используйте параметр компилятора /Gy; для помещения данных const объявите их как __declspec(selectany). Дополнительные сведения о порядке задания данных для свертки см. в разделе selectany.

    По умолчанию параметр ICF включен, если включен параметр REF. Чтобы переопределить это значение по умолчанию, если указано значение REF, используйте значение NOICF. Если для отладочной сборки не указан параметр /OPT:REF, для включения свертки записей COMDAT необходимо явно указать параметр /OPT:ICF. Однако поскольку параметр /OPT:ICF может объединять идентичные данные или функции, он может изменять имена функций, которые отображаются в трассировках стека. Он также может привести к невозможности задания точек останова в некоторых функциях или невозможности изучения некоторых данные в отладчике, а при пошаговом выполнении кода возможен переход в непредвиденную функцию. Поэтому не рекомендуется использовать параметр /OPT:ICF в отладочных сборках, если только преимущества меньшего объема кода не перевешивают эти недостатки.

    Примечание

    Поскольку параметр /OPT:ICF может вызвать назначение одного и того же адреса различным функциям или данным-членам только для чтения (переменные const, скомпилированные с параметром /Gy), это может нарушить работу программы, которая зависит от уникальный адресов для функций или данных-членов только для чтения.Дополнительные сведения см. в разделе /Gy (включение компоновки на уровне функций).

  • LBR | NOLBR
    Параметры /OPT:LBR и /OPT:NOLBR применяются только к двоичным файлам ARM. Поскольку некоторые инструкции ветвления процессора ARM имеют ограниченный диапазон, если компоновщик обнаруживает переход к адресу вне допустимого диапазона, он заменяет адрес места назначения инструкции ветвления адресом "островка" кода, содержащим инструкцию ветвления, нацеленную на фактическое место назначения. Параметр /OPT:LBR можно использовать, чтобы оптимизировать обнаружение длинных команд ветвления и размещения промежуточных островков кода для минимизации общего объема кода. Параметр /OPT:NOLBR указывает компоновщику на необходимость создания островков кода для длинных команд ветвления по мере их обнаружения, без оптимизации.

    По умолчанию параметр /OPT:LBR задается, когда инкрементная компоновка не включена. Если требуется неинкрементная компоновка, но не требуется оптимизация длинных команд ветвления, укажите параметр /OPT:NOLBR. При использовании параметра /OPT:LBR отключается инкрементная компоновка.

Заметки

Оптимизация обычно позволяет уменьшить размер образа и повысить производительность программы, однако при этом увеличивается время компоновки.

Чтобы просмотреть список функций, исключаемых при использовании параметра /OPT:REF, а также функций, свертываемых при использовании параметра /OPT:ICF, используйте параметр /VERBOSE.

Установка параметра компоновщика OPT:ICF или OPT:REF в среде разработки Visual Studio

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

  2. В левой области разверните узел Свойства конфигурации, Компоновщик, Оптимизация.

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

    • Включить свертывание записей COMDAT

    • Ссылки

Установка параметра компоновщика OPT:LBR в среде разработки Visual Studio

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

  2. Выберите папку Компоновщик.

  3. Выберите страницу свойств Командная строка.

  4. Введите параметр в поле Дополнительные параметры:

    /opt:lbr

Задание данного параметра компоновщика программным способом

См. также

Ссылки

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

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