/ORDER (Ustaw funkcje w kolejności)
Określ kolejność łączy dla oddzielnie spakowanych funkcji (COMDAT).
Składnia
/ORDER:@nazwa_pliku
Parametry
filename
Plik tekstowy określający kolejność łączy dla funkcji COMDAT.
Uwagi
Opcja /ORDER kompilatora umożliwia optymalizację zachowania stronicowania programu przez grupowanie funkcji wraz z funkcjami, które wywołuje. Można również grupować często nazywane funkcje razem. Te techniki, znane jako dostrajanie zamiany lub optymalizacja stronicowania, zwiększają prawdopodobieństwo, że wywołana funkcja jest w pamięci, gdy jest potrzebna i nie musi być stronicowana z dysku.
Podczas kompilowania kodu źródłowego do pliku obiektu można poinformować kompilator, aby umieścić każdą funkcję we własnej sekcji o nazwie COMDAT przy użyciu /Gy (Włącz łączenie na poziomie funkcji) opcji kompilatora. Opcja konsolidatora /ORDER informuje konsolidatora, aby umieścić COMDATs w obraz wykonywalny w określonej kolejności.
Aby określić kolejność COMDAT, utwórz plik odpowiedzi, plik tekstowy, który wyświetla listę każdego comDAT według nazwy, jeden na wiersz, w kolejności, w której mają zostać umieszczone przez konsolidator. Przekaż nazwę tego pliku jako parametr nazwy pliku /ORDER opcji. W przypadku funkcji języka C++ nazwa comDAT jest ozdobioną formą nazwy funkcji. Użyj nazwy nieukodowanej dla funkcji języka C, main
i dla funkcji języka C++ zadeklarowanych jako extern "C"
. W nazwach funkcji i nazwach ozdobionych uwzględniana jest wielkość liter. Aby uzyskać więcej informacji na temat nazw ozdobionych, zobacz Nazwy ozdobione.
Aby znaleźć nazwy ozdobione sieci COMDATs, użyj opcji /SYMBOLS narzędzia DUMPBIN w pliku obiektu. Konsolidator automatycznie poprzedza podkreślenie (_) nazwami funkcji w pliku odpowiedzi, chyba że nazwa rozpoczyna się od znaku zapytania (?) lub znaku (@). Na przykład jeśli plik źródłowy, example.cpp, zawiera funkcje int cpp_func(int)
extern "C" int c_func(int)
i int main(void)
, polecenie DUMPBIN /SYMBOLS example.obj
wyświetla następujące nazwy ozdobione:
...
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
...
W takim przypadku określ nazwy jako ?cpp_func@@YAHH@Z
, c_func
i main
w pliku odpowiedzi.
Jeśli w opcjach konsolidatora pojawi się więcej niż jedna opcja /ORDER , ostatni określony zostanie zastosowany.
Opcja /ORDER wyłącza łączenie przyrostowe. Może zostać wyświetlone ostrzeżenie konsolidatora LNK4075 po określeniu tej opcji, jeśli włączono łączenie przyrostowe lub jeśli określono opcję kompilatora /ZI (przyrostowy plik PDB). Aby wyciszyć to ostrzeżenie, możesz użyć opcji /INCREMENTAL:NO konsolidatora, aby wyłączyć łączenie przyrostowe i użyć opcji kompilatora /Zi (Generuj PDB) w celu wygenerowania pliku PDB bez łączenia przyrostowego.
Uwaga
Link nie może porządkować funkcji statycznych, ponieważ nazwy funkcji statycznych nie są nazwami symboli publicznych. Po określeniu /ORDER ostrzeżenie konsolidatora LNK4037 jest generowane dla każdego symbolu w pliku odpowiedzi zamówienia, który jest statyczny lub nie znaleziono.
Aby ustawić tę opcję konsolidatora w środowisku programowania Visual Studio
Otwórz okno dialogowe Strony właściwości projektu. Aby uzyskać szczegółowe informacje, zobacz Set C++ compiler and build properties in Visual Studio (Ustawianie właściwości kompilatora języka C++ i kompilowania w programie Visual Studio).
Wybierz stronę właściwości Optymalizacji konsolidatora właściwości>konsolidatora> konfiguracji.
Zmodyfikuj właściwość Order funkcji, aby zawierała nazwę pliku odpowiedzi.
Aby programowo ustawić tę opcję konsolidatora
- Zobacz: FunctionOrder.