/OPT (Optymalizacje)/OPT (Optimizations)

Kontroluje optymalizacje, które LINK wykonuje podczas kompilacji.Controls the optimizations that LINK performs during a build.

SkładniaSyntax

/OPT:{ref | NOREF} /OPT:{REF | NOREF}
/OPT:{ [ = iteracje ICF] | NOICF} /OPT:{ICF[=iterations] | NOICF}
/OPT:{LBR | NOLBR}/OPT:{LBR | NOLBR}

ArgumentyArguments

NOREF ref |REF | NOREF

/OPT: ref eliminuje funkcje i dane, które nigdy nie są przywoływane; /OPT: NOREF utrzymuje funkcje i dane, które nigdy nie są przywoływane./OPT:REF eliminates functions and data that are never referenced; /OPT:NOREF keeps functions and data that are never referenced.

Gdy/OPT: REF jest włączona, LINK usuwa spakowane funkcje i dane, znane jako COMDAT.When /OPT:REF is enabled, LINK removes unreferenced packaged functions and data, known as COMDATs. Ta optymalizacja jest znana jako eliminacja przechodnia (lub tranzytywna) COMDAT.This optimization is known as transitive COMDAT elimination. Opcja /OPT: ref wyłącza również łączenie przyrostowe.The /OPT:REF option also disables incremental linking.

Wbudowane funkcje i funkcje członkowskie zdefiniowane wewnątrz deklaracji klasy są zawsze COMDAT.Inlined functions and member functions defined inside a class declaration are always COMDATs. Wszystkie funkcje w pliku obiektu są wprowadzane do COMDAT, jeśli są kompilowane przy użyciu opcji /Gy .All of the functions in an object file are made into COMDATs if it is compiled by using the /Gy option. Aby umieścić const dane w COMDAT, należy je zadeklarować za pomocą __declspec(selectany) .To place const data in COMDATs, you must declare it by using __declspec(selectany). Aby uzyskać informacje na temat sposobu określania danych do usunięcia lub złożenia, zobacz selectany.For information about how to specify data for removal or folding, see selectany.

Domyślnie /OPT: ref jest włączany przez konsolidator, chyba że określono /OPT: NOREF lub /Debug .By default, /OPT:REF is enabled by the linker unless /OPT:NOREF or /DEBUG is specified. Aby zastąpić to ustawienie domyślne i zachować COMDAT bez odwołań w programie, należy określić /OPT: NOREF.To override this default and keep unreferenced COMDATs in the program, specify /OPT:NOREF. Można użyć opcji /include , aby zastąpić usunięcie określonego symbolu.You can use the /INCLUDE option to override the removal of a specific symbol.

Jeśli jest określona opcja /Debug , wartością domyślną dla /opt jest NOREF, a wszystkie funkcje są zachowywane w obrazie.If /DEBUG is specified, the default for /OPT is NOREF, and all functions are preserved in the image. Aby zastąpić to ustawienie domyślne i zoptymalizować kompilację debugowania, należy określić /OPT: ref.To override this default and optimize a debug build, specify /OPT:REF. Może to zmniejszyć rozmiar pliku wykonywalnego i może być przydatna Optymalizacja nawet w kompilacjach debugowania.This can reduce the size of your executable, and can be a useful optimization even in debug builds. Zalecamy również określenie /OPT: NOICF , aby zachować identyczne funkcje w kompilacjach debugowania.We recommend that you also specify /OPT:NOICF to preserve identical functions in debug builds. Dzięki temu można łatwiej odczytywać ślady stosu i ustawiać punkty przerwania w funkcjach, które w przeciwnym razie byłyby składane razem.This makes it easier to read stack traces and set breakpoints in functions that would otherwise be folded together.

Zapora ICF [ = iteracje] | NOICFICF[=iterations] | NOICF

Użyj iteracji usługi ICF [ = ], aby wykonać identyczne składanie COMDAT.Use ICF[=iterations] to perform identical COMDAT folding. Zbędne dane COMDAT mogą być usunięte z danych wyjściowych konsolidatora.Redundant COMDATs can be removed from the linker output. Opcjonalne parametry iteracji określają, ile razy mają być przenoszone symbole dla duplikatów.The optional iterations parameter specifies the number of times to traverse the symbols for duplicates. Domyślna liczba iteracji wynosi 1.The default number of iterations is 1. Dodatkowe iteracje mogą zlokalizować więcej duplikatów, które zostaną odkryte przez składanie w poprzedniej iteracji.Additional iterations may locate more duplicates that are uncovered through folding in the previous iteration.

Domyślnie /OPT: Zapora ICF jest włączana przez konsolidator, chyba że określono /OPT: NOICF lub /Debug .By default, /OPT:ICF is enabled by the linker unless /OPT:NOICF or /DEBUG is specified. Aby zastąpić to ustawienie domyślne i zapobiec składaniu COMDAT w programie, należy określić /OPT: NOICF.To override this default and prevent COMDATs from being folded in the program, specify /OPT:NOICF.

W kompilacji debugowania należy jawnie określić /OPT: ICF , aby umożliwić składanie COMDAT.In a debug build, you must explicitly specify /OPT:ICF to enable COMDAT folding. Jednak ponieważ /OPT: ICF może scalać identyczne dane lub funkcje, może zmienić nazwy funkcji, które pojawiają się w śladach stosu.However, because /OPT:ICF can merge identical data or functions, it can change the function names that appear in stack traces. Może również uniemożliwić ustawienie punktów przerwania w niektórych funkcjach lub przeanalizować niektóre dane w debugerze i może przejść do nieoczekiwanych funkcji podczas wykonywania pojedynczych kroków w kodzie.It can also make it impossible to set breakpoints in certain functions or to examine some data in the debugger, and can take you into unexpected functions when you single-step through your code. Zachowanie kodu jest identyczne, ale Prezentacja debugera może być bardzo myląca.The behavior of the code is identical, but the debugger presentation can be very confusing. W związku z tym nie zaleca się używania /OPT: ICF w kompilacjach debugowania, chyba że zalety mniejszego kodu przekraczają te wady.Therefore, we do not recommend that you use /OPT:ICF in debug builds unless the advantages of smaller code outweigh these disadvantages.

Uwaga

Ponieważ /OPT: ICF może spowodować, że ten sam adres zostanie przypisany do różnych funkcji lub elementów członkowskich danych tylko do odczytu (czyli const zmienne po skompilowaniu za pomocą /Gy), może przerwać program, który zależy od unikatowych adresów dla funkcji lub elementów członkowskich danych tylko do odczytu.Because /OPT:ICF can cause the same address to be assigned to different functions or read-only data members (that is, const variables when compiled by using /Gy), it can break a program that depends on unique addresses for functions or read-only data members. Aby uzyskać więcej informacji, zobacz /Gy (Włączanie łączenia Function-Level).For more information, see /Gy (Enable Function-Level Linking).

LBR | NOLBRLBR | NOLBR

Opcje /OPT: LBR i /OPT: NOLBR dotyczą tylko plików binarnych ARM.The /OPT:LBR and /OPT:NOLBR options apply only to ARM binaries. Ponieważ pewne instrukcje gałęzi procesora ARM mają ograniczony zakres, jeśli konsolidator wykryje przeskoczenie do adresu spoza zakresu, zastępuje adres docelowy instrukcji gałęzi adresem o adresie "Wyspa", który zawiera instrukcję gałęzi, która jest przeznaczona dla rzeczywistej lokalizacji docelowej.Because certain ARM processor branch instructions have a limited range, if the linker detects a jump to an out-of-range address, it replaces the branch instruction's destination address with the address of a code "island" that contains a branch instruction that targets the actual destination. Można użyć /OPT: LBR , aby zoptymalizować wykrywanie instrukcji długich gałęzi i rozmieszczenia pośrednich wysp kodu w celu zminimalizowania ogólnego rozmiaru kodu.You can use /OPT:LBR to optimize the detection of long branch instructions and the placement of intermediate code islands to minimize overall code size. /OPT: NOLBR nakazuje konsolidatorowi generowanie wysp kodu dla długich instrukcji gałęzi w miarę ich napotkania, bez optymalizacji./OPT:NOLBR instructs the linker to generate code islands for long branch instructions as they are encountered, without optimization.

Domyślnie opcja /OPT: LBR jest ustawiana, gdy łączenie przyrostowe nie jest włączone.By default, the /OPT:LBR option is set when incremental linking is not enabled. Jeśli chcesz utworzyć łącze nieprzyrostowe, ale nie długotrwałe optymalizacje gałęzi, określ /OPT: NOLBR.If you want a non-incremental link but not long branch optimizations, specify /OPT:NOLBR. Opcja /OPT: LBR wyłącza łączenie przyrostowe.The /OPT:LBR option disables incremental linking.

UwagiRemarks

W przypadku użycia w wierszu polecenia, konsolidator domyślnie ustawia /OPT: REF, ICF, LBR.When used at the command line, the linker defaults to /OPT:REF,ICF,LBR. Jeśli jest określona opcja /Debug , wartość domyślna to /OPT: NOREF, NOICF, NOLBR.If /DEBUG is specified, the default is /OPT:NOREF,NOICF,NOLBR.

Optymalizacje /opt zazwyczaj zmniejszają rozmiar obrazu i zwiększają szybkość działania programu.The /OPT optimizations generally decrease the image size and increase the program speed. Te ulepszenia mogą być istotne w większych programach, dlatego są one domyślnie włączone dla kompilacji detalicznych.These improvements can be substantial in larger programs, which is why they are enabled by default for retail builds.

Optymalizacja konsolidatora zajmuje dodatkowy czas na początku, ale zoptymalizowany kod również zapisuje czas, gdy konsolidator ma mniejszą relokację w celu usunięcia i utworzenia mniejszego obrazu końcowego i zapisuje jeszcze więcej czasu, gdy ma mniej informacji debugowania do przetwarzania i zapisywania w pliku PDB.Linker optimization does take extra time up front, but the optimized code also saves time when the linker has fewer relocations to fix up and creates a smaller final image, and it saves even more time when it has less debug information to process and write into the PDB. Gdy Optymalizacja jest włączona, może skutkować szybszym czasem łączenia, ponieważ niewielki dodatkowy koszt analizy może być wyższy niż przesunięty przez oszczędność czasu w konsolidatorze w przypadku mniejszych plików binarnych.When optimization is enabled, it can result in a faster link time overall, as the small additional cost in analysis may be more than offset by the time savings in linker passes over smaller binaries.

Argumenty /opt można określić razem, rozdzielając je przecinkami.The /OPT arguments may be specified together, separated by commas. Na przykład zamiast /OPT: ref/OPT: NOICF, można określić /OPT: REF, NOICF.For example, instead of /OPT:REF /OPT:NOICF, you can specify /OPT:REF,NOICF.

Aby zobaczyć funkcje, które są usuwane przez /OPT: ref i funkcje, które są składane przez /OPT: ICF, można użyć opcji /verbose konsolidatora.You can use the /VERBOSE linker option to see the functions that are removed by /OPT:REF and the functions that are folded by /OPT:ICF.

Argumenty /opt są często ustawiane dla projektów utworzonych przy użyciu okna dialogowego Nowy projekt w środowisku IDE programu Visual Studio i zazwyczaj mają różne wartości dla konfiguracji debugowania i wydań.The /OPT arguments are often set for projects created by using the New Project dialog in the Visual Studio IDE, and usually have different values for debug and release configurations. Jeśli nie ustawiono żadnej wartości dla tych opcji konsolidatora w projekcie, możesz uzyskać wartości domyślne projektu, które mogą się różnić od wartości domyślnych używanych przez konsolidator w wierszu polecenia.If no value is set for these linker options in your project, then you may get the project defaults, which can be different from the default values used by the linker at the command line.

Aby ustawić opcję OPT:ICF lub OPT:REF konsolidatora w środowisku programowania Visual StudioTo set the OPT:ICF or OPT:REF linker option in the Visual Studio development environment

  1. Otwórz okno dialogowe strony właściwości projektu.Open the project's Property Pages dialog box. Aby uzyskać szczegółowe informacje, zobacz Ustawianie kompilatora C++ i właściwości kompilacji w programie Visual Studio.For details, see Set C++ compiler and build properties in Visual Studio.

  2. Wybierz > > stronę właściwości optymalizacji konsolidatora właściwości konfiguracji.Select the Configuration Properties > Linker > Optimization property page.

  3. Zmodyfikuj jedną z tych właściwości:Modify one of these properties:

    • Włącz zwijanie COMDATEnable COMDAT Folding

    • Materiały źródłoweReferences

Aby ustawić opcję konsolidatora OPT:LBR w środowisku programowania Visual StudioTo set the OPT:LBR linker option in the Visual Studio development environment

  1. Otwórz okno dialogowe strony właściwości projektu.Open the project's Property Pages dialog box. Aby uzyskać szczegółowe informacje, zobacz Ustawianie kompilatora C++ i właściwości kompilacji w programie Visual Studio.For details, see Set C++ compiler and build properties in Visual Studio.

  2. Wybierz stronę właściwości Konfiguracja właściwości > > wiersza polecenia konsolidatora.Select the Configuration Properties > Linker > Command Line property page.

  3. Wprowadź opcję w opcjach dodatkowych:Enter the option in Additional Options:

    /opt:lbr lub /opt:nolbr/opt:lbr or /opt:nolbr

Aby programowo ustawić tę opcję konsolidatoraTo set this linker option programmatically

Zobacz teżSee also