Параметр /OPT (оптимизация)
Управляет оптимизацией, выполняемой во время сборки с помощью программы LINK.
Синтаксис
/OPT:{REF NOREF | }
/OPT:{ICF[=итерации] | NOICF}
/OPT:{LBR | NOLBR}
Аргументы
REF NOREF |
/OPT:REF устраняет функции и данные, которые никогда не ссылаются; /OPT:NOREF сохраняет функции и данные, на которые никогда не ссылаются.
Если включен параметр /OPT:REF, LINK удаляет неуправляемые упакованные функции и данные, известные как COMDATs. Такой способ оптимизации называется транзитивным исключением функций COMDAT. Параметр /OPT:REF также отключает добавочное связывание.
Встроенные функции и функции-члены, определенные внутри объявления класса, всегда являются COMDATs. Все функции в файле объектов выполняются в COMDATs, если он компилируется с помощью параметра /Gy . Чтобы поместить const
данные в COMDATs, его необходимо объявить с помощью __declspec(selectany)
. Сведения о том, как указать данные для удаления или свертывания, см. в разделе selectany.
По умолчанию параметр /OPT:REF включен компоновщиком, если не указан параметр /OPT:NOREF или /DEBUG. Чтобы переопределить этот параметр по умолчанию и сохранить в программе неуправляемые COMDATs, укажите /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 может привести к назначению одного и того же адреса различным функциям или элементам данных только для чтения (то есть переменным при компиляции с помощью /Gy), он может нарушить программу, const
которая зависит от уникальных адресов для функций или членов данных только для чтения. Дополнительные сведения см. в разделе /Gy (включение компоновки на уровне функций).
LBR | NOLBR
Параметры /OPT:LBR и /OPT:NOLBR применяются только к двоичным файлам ARM. Так как некоторые инструкции процессора ARM имеют ограниченный диапазон, если компоновщик обнаруживает переход к адресу вне диапазона, он заменяет адрес назначения ветви адресом назначения кода "остров", который содержит инструкцию ветви, предназначенную для фактического назначения. Для оптимизации обнаружения длинных ветвей и размещения промежуточных островов кода можно использовать /OPT:LBR , чтобы свести к минимуму общий размер кода. /OPT:NOLBR указывает компоновщику создавать острова кода для длинных инструкций ветви по мере их обнаружения без оптимизации.
По умолчанию параметр /OPT:LBR устанавливается, если добавочное связывание не включено. Если требуется добавочная ссылка, но не длинная оптимизация ветви, укажите /OPT:NOLBR. Параметр /OPT:LBR отключает добавочное связывание.
Замечания
При использовании в командной строке компоновщик по умолчанию используется для /OPT:REF,ICF,LBR. Если указан параметр /DEBUG , по умолчанию используется параметр /OPT:NOREF,NOICF,NOLBR.
Оптимизация /OPT обычно уменьшает размер изображения и увеличивает скорость программы. Эти улучшения могут быть существенными в больших программах, поэтому они включены по умолчанию для розничных сборок.
Оптимизация компоновщика занимает дополнительное время, но оптимизированный код также экономит время, когда компоновщик имеет меньше перемещений, чтобы исправить и создать меньший окончательный образ, и он экономит еще больше времени, когда у него меньше отладочных данных для обработки и записи в PDB. Если оптимизация включена, это может привести к более быстрому времени соединения в целом, так как небольшие дополнительные затраты в анализе могут быть больше, чем смещение за счет экономии времени компоновщика проходит через небольшие двоичные файлы.
Аргументы /OPT могут быть указаны вместе, разделенные запятыми. Например, вместо /OPT:REF /OPT:NOICF можно указать /OPT:REF,NOICF.
Вы можете использовать параметр компоновщика /VERBOSE для просмотра функций, удаленных /OPT:REF , и функций, сложенных /OPT:ICF.
Аргументы /OPT часто задаются для проектов, созданных с помощью диалогового окна создания проекта в интегрированной среде разработки Visual Studio, и обычно имеют разные значения для конфигураций отладки и выпуска. Если для этих параметров компоновщика в проекте не задано значение, вы можете получить значения по умолчанию проекта, которые могут отличаться от значений по умолчанию, используемых компоновщиком в командной строке.
Установка параметра компоновщика OPT:ICF или OPT:REF в среде разработки Visual Studio
Откройте диалоговое окно Страницы свойств проекта. Подробнее см. в статье Настройка компилятора C++ и свойства сборки в Visual Studio.
Выберите страницу свойств оптимизации компоновщика>конфигурации.>
Измените одно из следующих свойств:
Включение свертывания COMDAT
Ссылки
Установка параметра компоновщика OPT:LBR в среде разработки Visual Studio
Откройте диалоговое окно Страницы свойств проекта. Подробнее см. в статье Настройка компилятора C++ и свойства сборки в Visual Studio.
Перейдите на страницу свойств Свойства конфигурации>Компоновщик>Командная строка.
Введите параметр в разделе "Дополнительные параметры":
/opt:lbr
или/opt:nolbr
Задание данного параметра компоновщика программным способом
- См. описание свойств EnableCOMDATFolding и OptimizeReferences.