Поделиться через


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

Обновлен: Ноябрь 2007

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

 /OPT:{REF | NOREF} /OPT:{ICF[=iterations] | NOICF} /OPT:{WIN98 | NOWIN98}

Аргументы

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

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

    Если задан параметр /DEBUG, по умолчанию используется параметр /OPTNOREF (в противном случае используется параметр REF), определяющий сохранение в образе всех функций. Чтобы переопределить поведение по умолчанию и выполнить оптимизацию отладочного построения, используйте параметр /OPT:REF. При использовании параметра /OPT:REF отключается последовательная компоновка.

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

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

    link /opt:ref /opt:noicf
    

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

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

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

    Функции помещаются в записи COMDAT с помощью параметра компилятора /Gy. Данные констант помещаются в записи COMDAT. Сведения об определении данных для свертывания см. в описании параметра selectany.

    Если включен параметр REF, параметр ICF по умолчанию включен. При отладочном построении этот параметр необходимо включать явно. При необходимости можно задать параметр NOICF при включенном параметре REF.

    bxwfs976.alert_note(ru-ru,VS.90).gifПримечание.

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

  • WIN98 | NOWIN98
    Параметры WIN98 и NOWIN98 определяют выравнивание раздела в конечном образе. В приложениях Windows 98 для уменьшения времени загрузки используется выравнивание разделов по границе 4 КБ (за счет этого обеспечивается максимально эффективное использование памяти диспетчером памяти Windows 98 при кэшировании исполняемых образов). По умолчанию этот параметр компоновщика включен. Чтобы создать усеченную версию приложения с меньшей по сравнению с Windows 98 производительностью, задайте параметр /OPT:NOWIN98.

    Параметр WIN98 по умолчанию включен и отключается в следующих случаях:

    • Используется параметр /ALIGN.

    • В качестве конечной платформы параметра /MACHINE задана платформа, отличная от x86.

    • Параметр /SUBSYSTEM определяет подсистему, отличную от WINDOWS или CONSOLE.

    Параметр /OPT:WIN98 не включается по умолчанию для образов, для которых возможен рост более чем на 25 процентов (в соответствии с приведенными ниже формулами расчета среднего значения роста). Другими словами, параметр /OPT:WIN98 не включается для образов небольшого размера. Чтобы обеспечить правильность работы при подобном изменении параметров, следует явно включить параметр /OPT:WIN98. Чтобы создать версию приложения меньшего размера с меньшей по сравнению с Windows 98 производительностью, задайте параметр /OPT:NOWIN98.

    Расширения Windows 98 работают только в том случае, если разделы переносимого исполняемого образа начинаются на границе странице. Соответствующее выравнивание файла выполняется с помощью параметра /OPT:WIN98.

    При создании компонентов для работы только в операционных системах Windows NT или Windows 2000 следует использовать параметр /OPT:NOWIN98.

    Это изменение не влияет на загрузку образов или рабочих наборов процесса. Изменяется только объем занимаемого на диске пространства.

    Ниже приведены формулы, позволяющие определить среднее значение роста образа при использовании параметра /OPT:WIN98:

    • Средний объем неиспользуемого пространства при выравнивании файла по границе 4096 байт: число разделов в образе * 4096/2

    • Средний объем неиспользуемого пространства при текущем выравнивании файла по границе 512 байт: число разделов в образе * 512/2

    Рост определяется следующим образом:

    • Значение роста в байтах = число разделов в образе * (4096/2 - 512/2)

      или (после упрощения)

      Значение роста в байтах = число разделов в образе * 1792

      Однако в этом случае не учитывается необходимость заполнения заголовка образа до выравнивания раздела. Поскольку размер заголовка во всех случаях не превышает 512, значение дополнительного роста является постоянным и составляет 3584 (определяется как 4096 - 512).

    • Среднее значение роста в байтах = число разделов в образе * 1792 + 3584

    • Максимальное значение роста в байтах = число разделов в образе * (4096 - 512 + 3584)

    Чтобы определить число разделов, выполните программу DUMPBIN для исполняемого файла. В сводке программы отображается число разделов в образе. Обычно к этому значению добавляется от 3 до 5 разделов.

    Параметр /OPT:WIN98 не следует использовать только в том случае, если переносимый исполняемый образ имеет малый размер. Даже если образ предназначен для загрузки, неиспользуемое пространство заполняется нулями, что обеспечивает достаточно высокий коэффициент сжатия.

Заметки

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

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

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

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

  2. Откройте папку Компоновщик.

  3. Выберите страницу свойств Оптимизация.

  4. Измените значение одного из следующих свойств:

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

    • Оптимизировать для Windows98

    • Ссылки

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

См. также

Ссылки

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

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