/OPT (Optymalizacje)
Kontroluje optymalizacje, które LINK wykonuje podczas kompilacji.
Składnia
/OPT:{REF | NOREF}
/OPT:{ICF[=iteracje] | NOICF}
/OPT:{LBR NOLBR | }
Argumenty
REF | NOREF
/OPT:REF eliminuje funkcje i dane, do których nigdy się nie odwołujesz; /OPT:NOREF przechowuje funkcje i dane, do których nigdy nie odwołuje się odwołanie.
Po włączeniu /OPT:REF link usuwa nieużywane spakowane funkcje i dane, znane jako COMDATs. Ta optymalizacja jest znana jako eliminacja przechodnia (lub tranzytywna) COMDAT. Opcja /OPT:REF wyłącza również łączenie przyrostowe.
Funkcje wbudowane i funkcje składowe zdefiniowane wewnątrz deklaracji klasy są zawsze COMDATs. Wszystkie funkcje w pliku obiektu są tworzone w comDATs, jeśli jest kompilowany przy użyciu /Gy opcji. Aby umieścić const
dane w modelu COMDATs, należy je zadeklarować przy użyciu polecenia __declspec(selectany)
. Aby uzyskać informacje o sposobie określania danych do usuwania lub składania, zobacz selectany.
Domyślnie /OPT:REF jest włączony przez konsolidator, chyba że /OPT:NOREF lub /DEBUG jest określony. Aby zastąpić tę wartość domyślną i zachować nieużywane COMDATs w programie, określ /OPT:NOREF. Możesz użyć /INCLUDE opcji, aby zastąpić usunięcie określonego symbolu.
Jeśli /DEBUG jest określony, wartość domyślna / OPT to NOREF, a wszystkie funkcje są zachowywane na obrazie. Aby zastąpić tę domyślną i zoptymalizować kompilację debugowania, określ /OPT:REF. Może to zmniejszyć rozmiar pliku wykonywalnego i może być przydatną optymalizacją nawet w kompilacjach debugowania. Zalecamy również określenie /OPT:NOICF w celu zachowania identycznych funkcji w kompilacjach debugowania. 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.
ICF[=iteracje] | NOICF
Użyj iteracji ICF[=iteracji], aby wykonać identyczne składanie COMDAT. Zbędne dane COMDAT mogą być usunięte z danych wyjściowych konsolidatora. Opcjonalny parametr iteracji określa liczbę razy przechodzenia przez symbole dla duplikatów. Domyślna liczba iteracji to 1. Dodatkowe iteracje mogą zlokalizować więcej duplikatów, które zostaną odkryte przez składanie w poprzedniej iteracji.
Domyślnie /OPT:ICF jest włączony przez konsolidator, chyba że określono /OPT:NOICF lub /DEBUG . Aby zastąpić tę wartość domyślną i uniemożliwić składanie comDATs w programie, określ /OPT:NOICF.
W kompilacji debugowania należy jawnie określić /OPT:ICF , aby włączyć składanie COMDAT. Jednak ponieważ /OPT:ICF może scalić identyczne dane lub funkcje, może zmienić nazwy funkcji, które pojawiają się w śladach stosu. Może to również uniemożliwić ustawianie punktów przerwania w niektórych funkcjach lub analizowanie niektórych danych w debugerze i może sprawić, że staniesz się nieoczekiwanymi funkcjami podczas pojedynczego kroku za pomocą kodu. Zachowanie kodu jest identyczne, ale prezentacja debugera może być bardzo myląca. W związku z tym nie zalecamy używania /OPT:ICF w kompilacjach debugowania, chyba że zalety mniejszego kodu przewyższają te wady.
Uwaga
Ponieważ /OPT:ICF może spowodować przypisanie tego samego adresu do różnych funkcji lub elementów członkowskich danych tylko do odczytu (czyli const
zmiennych kompilowanych przy użyciu /Gy), może przerwać program, który zależy od unikatowych adresów dla funkcji lub elementów członkowskich danych tylko do odczytu. Aby uzyskać więcej informacji, zobacz /Gy (Włączanie łączenia na poziomie funkcji).
LBR | NOLBR
Opcje /OPT:LBR i /OPT:NOLBR mają zastosowanie tylko do plików binarnych ARM. Ponieważ niektóre instrukcje gałęzi procesora ARM mają ograniczony zakres, jeśli konsolidator wykryje skok do adresu poza zakresem, zastępuje adres docelowy instrukcji gałęzi adresem docelowym kodu "wyspa", który zawiera instrukcję gałęzi, która jest przeznaczona dla rzeczywistego miejsca docelowego. Można użyć /OPT:LBR , aby zoptymalizować wykrywanie długich instrukcji gałęzi i umieszczania wysp kodu pośredniego w celu zminimalizowania ogólnego rozmiaru kodu. /OPT:NOLBR instruuje konsolidatora, aby wygenerował wyspy kodu dla długich instrukcji gałęzi w miarę ich napotkania, bez optymalizacji.
Domyślnie opcja /OPT:LBR jest ustawiana, gdy łączenie przyrostowe nie jest włączone. Jeśli chcesz utworzyć link nie przyrostowy, ale nie ma długich optymalizacji gałęzi, określ /OPT:NOLBR. Opcja /OPT:LBR wyłącza łączenie przyrostowe.
Uwagi
W przypadku użycia w wierszu polecenia konsolidator domyślnie to /OPT:REF,ICF,LBR. Jeśli /DEBUG jest określony, wartość domyślna to /OPT:NOREF,NOICF,NOLBR.
Optymalizacje /OPT zwykle zmniejszają rozmiar obrazu i zwiększają szybkość programu. Te ulepszenia mogą być istotne w większych programach, dlatego są one domyślnie włączone w przypadku kompilacji detalicznych.
Optymalizacja konsolidatora zajmuje dodatkowy czas z góry, ale zoptymalizowany kod również oszczędza czas, gdy konsolidator ma mniej relokacji, aby naprawić i utworzyć mniejszy końcowy obraz, i oszczędza jeszcze więcej czasu, gdy ma mniej informacji debugowania do przetwarzania i zapisywania w pliku PDB. Po włączeniu optymalizacji może to spowodować skrócenie czasu połączenia, ponieważ niewielki dodatkowy koszt analizy może być większy niż przesunięcie oszczędności czasu w konsolidatorze przechodzi przez mniejsze pliki binarne.
Argumenty /OPT mogą być określone razem, rozdzielone przecinkami. Na przykład zamiast /OPT:REF /OPT:NOICF można określić /OPT:REF,NOICF.
Możesz użyć /VERBOSE konsolidatora, aby wyświetlić funkcje, które są usuwane przez /OPT:REF i funkcje, które są składane przez /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 zwykle mają różne wartości konfiguracji debugowania i wydania. Jeśli w projekcie nie ustawiono żadnej wartości dla tych opcji konsolidatora, możesz uzyskać wartości domyślne projektu, które mogą różnić się od wartości domyślnych używanych przez konsolidator w wierszu polecenia.
Aby ustawić opcję OPT:ICF lub OPT:REF 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 jedną z tych właściwości:
Włączanie składania COMDAT
Dokumentacja
Aby ustawić opcję konsolidatora OPT:LBR 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 wiersza polecenia konsolidatora>konfiguracji.>
Wprowadź opcję w obszarze Dodatkowe opcje:
/opt:lbr
lub/opt:nolbr
Aby programowo ustawić tę opcję konsolidatora
- Zobacz EnableCOMDATFolding i OptimizeReferences właściwości.