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

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

Синтаксис

/OPT:{ref | noref}
/OPT:{ [ = итерации ICF] | NOICF}
/OPT:{ЛБР | нолбр}

Аргументы

Noref ref |

/OPT: REF исключает функции и данные, на которые нет ссылок; /OPT: NOREF хранит функции и данные, на которые нет ссылок.

При включенном параметре/OPT: REF LINK удаляет упакованные функции и данные, которые не ссылаются, так называемые COMDAT. Такой способ оптимизации называется транзитивным исключением функций COMDAT. Параметр /OPT: REF также отключает инкрементную компоновку.

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

По умолчанию параметр /OPT: REF включен компоновщиком, если не указан параметр /OPT: NOREF или /Debug . Чтобы переопределить это значение по умолчанию и удержать в программе неиспользуемые COMDAT, укажите /OPT: NOREF. Можно использовать параметр /include , чтобы переопределить удаление определенного символа.

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

[ ICF = итерации] | NOICF

Используйте [ = итерации ICF] для выполнения идентичного сворачивания COMDAT. Избыточные записи COMDAT можно удалить из выходных данных компоновщика. Параметр необязательные итерации указывает количество проходов по символам для дубликатов. По умолчанию число итераций равно 1. При большем числе итераций возможно обнаружение дополнительных дубликатов, появляющихся после свертывания в предыдущих итерациях.

По умолчанию параметр /OPT: ICF включен компоновщиком, если не указан параметр /OPT: NOICF или /Debug . Чтобы переопределить это значение по умолчанию и запретить свертывание COMDAT в программе, укажите /OPT: NOICF.

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

Примечание

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

Лбр | нолбр

Параметры /OPT: ЛБР и /OPT: нолбр применяются только к двоичным файлам ARM. Поскольку некоторые инструкции ветвления процессора ARM имеют ограниченный диапазон, если компоновщик обнаруживает переход к адресу вне диапазона, он заменяет адрес назначения инструкции Branch адресом «остров», который содержит инструкцию ветвления, которая нацелена на фактическое назначение. С помощью /OPT: ЛБР можно оптимизировать обнаружение длинных инструкций филиала и размещение промежуточных островов кода, чтобы сократить общий размер кода. /OPT: нолбр предписывает компоновщику создавать острова кода для длинных инструкций ветвления по мере их обнаружения без оптимизации.

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

Комментарии

При использовании в командной строке компоновщик по умолчанию имеет значение /OPT: ref, ICF, ЛБР. Если указано значение /Debug , по умолчанию используется параметр /OPT: NOREF, NOICF, нолбр.

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

Оптимизация компоновщика занимает дополнительное время, но оптимизированный код также экономит время, когда у компоновщика меньше расположений для исправления и создает меньшее окончательное изображение, и он сохраняет еще больше времени, когда в нем меньше отладочных данных для обработки и записи в PDB. Если оптимизация включена, это может привести к увеличению времени компоновки, так как небольшие дополнительные затраты на анализ могут быть более смещенными, чем сокращение времени, занимаемое компоновщиком, за счет сокращения двоичных файлов.

Аргументы /OPT можно указать вместе, разделяя их запятыми. Например, вместо /OPT: REF/OPT: NOICF можно указать параметр /OPT: ref, NOICF.

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

Аргументы /OPT часто устанавливаются для проектов, созданных с помощью диалогового окна Новый проект в интегрированной среде разработки Visual Studio, и обычно имеют разные значения для конфигураций отладки и выпуска. Если для этих параметров компоновщика в проекте не задано значение, вы можете получить значения по умолчанию для проекта, которые могут отличаться от значений по умолчанию, используемых компоновщиком в командной строке.

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

  1. Откройте диалоговое окно Страницы свойств проекта. Подробнее см. в статье Настройка компилятора C++ и свойства сборки в Visual Studio.

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

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

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

    • Справочные материалы

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

  1. Откройте диалоговое окно Страницы свойств проекта. Подробнее см. в статье Настройка компилятора C++ и свойства сборки в Visual Studio.

  2. Перейдите на страницу свойств Свойства конфигурации > Компоновщик > Командная строка.

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

    /opt:lbr или /opt:nolbr

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

См. также раздел