/ORDER (Reihenfolge von Funktionen festlegen)

Geben Sie die Verknüpfungsreihenfolge für separat verpackte Funktionen (COMDAT) an.

Syntax

/ORDER:@filename

Parameter

filename
Eine Textdatei, die die Linkreihenfolge für COMDAT-Funktionen angibt.

Hinweise

Mit der /ORDER-Compileroption können Sie das Pagingverhalten Ihres Programms optimieren, indem Sie eine Funktion zusammen mit den aufgerufenen Funktionen gruppieren. Sie können auch häufig aufgerufene Funktionen gruppieren. Diese Techniken, die als Swap Tuning oder Paging-Optimierung bezeichnet werden, erhöhen die Wahrscheinlichkeit, dass eine aufgerufene Funktion im Arbeitsspeicher ist, wenn sie benötigt wird und nicht vom Datenträger aus ausgelagert werden muss.

Wenn Sie den Quellcode in eine Objektdatei kompilieren, können Sie den Compiler anweisen, jede Funktion in einen eigenen Abschnitt zu setzen, der als COMDAT bezeichnet wird, indem Sie die Compileroption /Gy (Verknüpfung auf Funktionsebene aktivieren) verwenden. Die Option "/ORDER linker" weist den Linker an, COMDATs in der von Ihnen angegebenen Reihenfolge in das ausführbare Image zu setzen.

Um die COMDAT-Reihenfolge anzugeben, erstellen Sie eine Antwortdatei, eine Textdatei, in der jede COMDAT anhand des Namens (eine pro Zeile) aufgelistet wird, in der Reihenfolge, in der sie vom Linker platziert werden sollen. Übergeben Sie den Namen dieser Datei als Dateinamenparameter der Option "/ORDER ". Bei C++-Funktionen ist der Name eines COMDAT die dekorierte Form des Funktionsnamens. Verwenden Sie den nicht definierten Namen für C-Funktionen, und für C++-Funktionen, maindie als extern "C"deklariert sind. Bei Funktionsnamen und versehenen Namen wird die Groß-/Kleinschreibung beachtet. Weitere Informationen zu verzierten Namen finden Sie unter "Versehene Namen".

Um die verzierten Namen Ihrer COMDATs zu finden, verwenden Sie die Option "/SYMBOLS" des DUMPBIN-Toolsin der Objektdatei. Der Linker stellt automatisch einen Unterstrich (_) in der Antwortdatei vor, es sei denn, der Name beginnt mit einem Fragezeichen (?) oder bei zeichen (@?). Wenn z. B. eine Quelldatei, z. B. ".cpp", Funktionen int cpp_func(int)extern "C" int c_func(int) enthält, und int main(void)enthält der Befehl DUMPBIN /SYMBOLS example.obj die folgenden versehenen Namen:

...
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
...

Geben Sie in diesem Fall die Namen als ?cpp_func@@YAHH@Z, c_funcund main in Der Antwortdatei an.

Wenn mehr als eine /ORDER-Option in den Linkeroptionen angezeigt wird, wird die letzte angegebene Option wirksam.

Die Option "/ORDER " deaktiviert die inkrementelle Verknüpfung. Es wird möglicherweise eine Linkerwarnung LNK4075 angezeigt, wenn Sie diese Option angeben, wenn die inkrementelle Verknüpfung aktiviert ist, oder wenn Sie die Compileroption /ZI (Inkrementelle PDB) angegeben haben. Um diese Warnung zu stillen, können Sie die Option "/INKREMENT:NO linker" verwenden, um die inkrementelle Verknüpfung zu deaktivieren, und die Compileroption /Zi (Generate PDB) verwenden, um eine PDB ohne inkrementelle Verknüpfung zu generieren.

Hinweis

LINK kann statische Funktionen nicht ordnen, da statische Funktionsnamen keine öffentlichen Symbolnamen sind. Wenn /ORDER angegeben wird, wird die Linkerwarnung LNK4037 für jedes Symbol in der Reihenfolgesantwortdatei generiert, die entweder statisch ist oder nicht gefunden wird.

So legen Sie diese Linkeroption in der Visual Studio-Entwicklungsumgebung fest

  1. Öffnen Sie das Dialogfeld Eigenschaftenseiten des Projekts. Weitere Informationen erhalten Sie unter Set C++ compiler and build properties in Visual Studio (Festlegen der Compiler- und Buildeigenschaften (C++) in Visual Studio).

  2. Wählen Sie die Eigenschaftenseite "Konfigurationseigenschaftenoptimierung>>" aus.

  3. Ändern Sie die Funktionsreihenfolge-Eigenschaft so, dass sie den Namen der Antwortdatei enthält.

So legen Sie diese Linkeroption programmgesteuert fest

Siehe auch

MSVC-Linkerreferenz
MSVC-Linkeroptionen