/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_func
main
в файле ответа.
Если в параметрах компоновщика отображается несколько параметров /ORDER , последний указанный параметр вступает в силу.
Параметр /ORDER отключает добавочное связывание. Предупреждение компоновщика может отображаться LNK4075 при указании этого параметра, если включена добавочная компоновка, или если указан параметр компилятора /ZI (добавочный PDB ). Чтобы замолчать это предупреждение, можно использовать параметр компоновщика /INCREMENTAL:NO , чтобы отключить добавочное связывание и использовать параметр компилятора /Zi (Generate PDB) для создания PDB без добавочного связывания.
Примечание.
LINK не может упорядочить статические функции, так как статические имена функций не являются именами открытых символов. При указании /ORDER предупреждение компоновщика LNK4037 создается для каждого символа в файле ответа порядка, который является статическим или не найден.
Задание данного параметра компоновщика в среде разработки Visual Studio
Откройте диалоговое окно Страницы свойств проекта. Подробнее см. в статье Настройка компилятора C++ и свойства сборки в Visual Studio.
Выберите страницу свойств оптимизации компоновщика>конфигурации.>
Измените свойство Order функции, чтобы он содержал имя файла ответа.
Задание данного параметра компоновщика программным способом
- См. раздел FunctionOrder.