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


/ORDER (размещение функций по порядку)

Укажите порядок ссылок для отдельных упакованных функций (COMDAT).

Синтаксис

/ORDER:@filename

Параметры

filename
Текстовый файл, указывающий порядок ссылок для функций COMDAT.

Замечания

Параметр компилятора /ORDER позволяет оптимизировать поведение разбиения по страницам программы, группируя функцию вместе с вызываемыми функциями. Вы также можете группировать часто называемые функции вместе. Эти методы, известные как настройка переключения или оптимизация разбиения на страницы, увеличьте вероятность того, что вызываемая функция находится в памяти при необходимости и не должна быть выстраиваема с диска.

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

Чтобы указать порядок COMDAT, создайте файл ответа, текстовый файл, который перечисляет каждый COMDAT по имени, по одному на строку, в том порядке, в который нужно поместить их компоновщиком. Передайте имя этого файла в качестве параметра имени файла параметра /ORDER. Для функций C++ имя COMDAT является украшенной формой имени функции. Используйте неоценированное имя функций C и для функций C++, mainобъявленных как extern "C". Имена функций и декорированные имена чувствительны к регистру. Дополнительные сведения о декорированных именах см. в разделе "Декорированные имена".

Чтобы найти декорированные имена COMDATs, используйте параметр /SYMBOLS средства DUMPBIN в файле объекта. Компоновщик автоматически добавляет знак подчеркивания (_) к именам функций в файле ответа, если имя не начинается с вопросительного знака (?) или при знаке (@). Например, если исходный файл, example.cpp, содержит функцииint cpp_func(int)extern "C" int c_func(int), а int main(void)команда DUMPBIN /SYMBOLS example.obj выводит следующие декорированные имена:

...
088 00000000 SECT1A notype ()    External     | ?cpp_func@@YAHH@Z (int __cdecl cpp_func(int))
089 00000000 SECT22 notype ()    External     | _c_func
08A 00000000 SECT24 notype ()    External     | _main
...

В этом случае укажите имена как ?cpp_func@@YAHH@Zи c_funcmain в файле ответа.

Если в параметрах компоновщика отображается несколько параметров /ORDER , последний указанный параметр вступает в силу.

Параметр /ORDER отключает добавочное связывание. Предупреждение компоновщика может отображаться LNK4075 при указании этого параметра, если включена добавочная компоновка, или если указан параметр компилятора /ZI (добавочный PDB ). Чтобы замолчать это предупреждение, можно использовать параметр компоновщика /INCREMENTAL:NO , чтобы отключить добавочное связывание и использовать параметр компилятора /Zi (Generate PDB) для создания PDB без добавочного связывания.

Примечание.

LINK не может упорядочить статические функции, так как статические имена функций не являются именами открытых символов. При указании /ORDER предупреждение компоновщика LNK4037 создается для каждого символа в файле ответа порядка, который является статическим или не найден.

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

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

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

  3. Измените свойство Order функции, чтобы он содержал имя файла ответа.

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

См. также

Справочник по компоновщику MSVC
Параметры компоновщика MSVC