/OPT (optimalizace)
Řídí optimalizace, které program LINK provádí během sestavování.
Syntaxe
/OPT:{ODKAZ | NOREF}
/OPT:{ICF[=iterace] | NOICF}
/OPT:{LBR NOLBR | }
Argumenty
ODKAZ | NOREF
/OPT:REF eliminuje funkce a data, na která se nikdy neodkazují; /OPT:NOREF uchovává funkce a data, na která se nikdy neodkazují.
Pokud je povolen /OPT:REF, link odebere neodkazované zabalené funkce a data, označované jako COMDATs. Tato optimalizace se označuje jako přechodné odstranění sekvence COMDAT. Možnost /OPT:REF také zakáže přírůstkové propojení.
Vložené funkce a členské funkce definované uvnitř deklarace třídy jsou vždy COMDATs. Všechny funkce v souboru objektu jsou provedeny do comDATs, pokud je zkompilován pomocí /Gy možnost. Chcete-li umístit const
data do objektů COMDAT, je nutné je deklarovat pomocí .__declspec(selectany)
Informace o tom, jak určit data pro odebrání nebo skládání, naleznete v tématu selectany.
Ve výchozím nastavení je parametr /OPT:REF povolen linkerem, pokud není zadán parametr /OPT:NOREF nebo /DEBUG. Chcete-li toto výchozí nastavení přepsat a zachovat neodkazované comDAT v programu, zadejte /OPT:NOREF. Odebrání konkrétního symbolu můžete přepsat pomocí možnosti /INCLUDE .
Pokud je zadán parametr /DEBUG , výchozí hodnota parametru /OPT je NOREF a všechny funkce se na obrázku zachovají. Pokud chcete toto výchozí nastavení přepsat a optimalizovat sestavení ladění, zadejte /OPT:REF. To může zmenšit velikost spustitelného souboru a může to být užitečná optimalizace i v ladicích buildech. Doporučujeme také zadat /OPT:NOICF pro zachování identických funkcí v buildech ladění. Usnadníte tím čtení trasování zásobníku a nastavení zarážek ve funkcích, které by jinak byly složeny dohromady.
ICF[=iterace] | NOICF
Pomocí ICF[=iterací] můžete provádět identické skládání COMDAT. Redundantní sekvence COMDAT lze odebrat z výstupu linkeru. Volitelný parametr iterací určuje, kolikrát se mají procházet symboly duplicit. Výchozí počet iterací je 1. Při dalších iteracích se mohou najít další duplicity, které se odhalí skládáním při předchozí iteraci.
Ve výchozím nastavení je parametr /OPT:ICF povolen linkerem, pokud není zadán parametr /OPT:NOICF nebo /DEBUG. Chcete-li toto výchozí nastavení přepsat a zabránit překládání objektů COMDAT v programu, zadejte /OPT:NOICF.
V sestavení ladění je nutné explicitně zadat /OPT:ICF pro povolení posouvání COMDAT. Protože ale /OPT:ICF může sloučit identická data nebo funkce, může změnit názvy funkcí, které se zobrazují v trasování zásobníku. Může také znemožnit nastavení zarážek v určitých funkcích nebo prozkoumání některých dat v ladicím programu a při jednoduchém procházení kódu vás může převést do neočekávaných funkcí. Chování kódu je stejné, ale prezentace ladicího programu může být velmi matoucí. Proto nedoporučujeme používat /OPT:ICF v buildech ladění, pokud výhody menšího kódu nepřeváží tyto nevýhody.
Poznámka:
Vzhledem k tomu, const
že /OPT:ICF může způsobit přiřazení stejné adresy různým funkcím nebo datovým členům jen pro čtení (tj. proměnným při kompilaci pomocí /Gy), může přerušit program, který závisí na jedinečných adresách pro funkce nebo datové členy jen pro čtení. Další informace najdete v tématu /Gy (povolení propojení na úrovni funkce).
LBR NOLBR |
Možnosti /OPT:LBR a /OPT:NOLBR se vztahují pouze na binární soubory ARM. Vzhledem k tomu, že některé instrukce pro větev procesoru ARM mají omezený rozsah, pokud linker zjistí přeskak na adresu mimo rozsah, nahradí cílovou adresu instrukce větve adresou "ostrůvku", která obsahuje instrukce větve, která cílí na skutečný cíl. Pomocí /OPT:LBR můžete optimalizovat detekci dlouhých instrukcí větve a umístění zprostředkujících ostrůvků kódu, abyste minimalizovali celkovou velikost kódu. /OPT:NOLBR dává linkeru pokyn, aby vygeneroval ostrůvky kódu pro dlouhé instrukce větve, jak jsou zjištěny, bez optimalizace.
Ve výchozím nastavení je možnost /OPT:LBR nastavena, pokud není povolené přírůstkové propojení. Pokud chcete nekrementální propojení, ale ne dlouhou optimalizaci větví, zadejte /OPT:NOLBR. Možnost /OPT:LBR zakáže přírůstkové propojení.
Poznámky
Při použití na příkazovém řádku se linker ve výchozím nastavení nastaví na /OPT:REF,ICF,LBR. Pokud je zadán parametr /DEBUG , výchozí hodnota je /OPT:NOREF,NOICF,NOLBR.
Optimalizace /OPT obecně snižují velikost obrázku a zvyšují rychlost programu. Tato vylepšení můžou být ve větších programech podstatně větší, což je důvod, proč jsou ve výchozím nastavení povoleny pro maloobchodní buildy.
Optimalizace linkeru trvá předem delší dobu, ale optimalizovaný kód také šetří čas, když linker má méně přemístění, aby se opravil a vytvořil menší konečný obrázek, a šetří ještě více času, když má méně informací o ladění ke zpracování a zápisu do PDB. Pokud je povolená optimalizace, může to mít za následek rychlejší celkovou dobu propojení, protože malé dodatečné náklady v analýze můžou být větší než posun díky úsporám času v linkeru procházejícím menšími binárními soubory.
Argumenty /OPT mohou být zadány společně oddělené čárkami. Například místo /OPT:REF /OPT:NOICF můžete zadat /OPT:REF,NOICF.
Pomocí možnosti /VERBOSE linker můžete zobrazit funkce, které jsou odebrané parametrem /OPT:REF a funkce složené funkcí /OPT:ICF.
Argumenty /OPT jsou často nastaveny pro projekty vytvořené pomocí dialogového okna Nový projekt v integrovaném vývojovém prostředí sady Visual Studio a obvykle mají různé hodnoty pro konfiguraci ladění a vydání. Pokud pro tyto možnosti linkeru v projektu není nastavená žádná hodnota, můžete získat výchozí hodnoty projektu, které se můžou lišit od výchozích hodnot používaných linkerem na příkazovém řádku.
Nastavení parametru linkeru OPT:ICF nebo OPT:REF ve vývojovém prostředí sady Visual Studio
Otevřete dialogové okno Stránky vlastností projektu. Podrobnosti najdete v tématu Nastavení kompilátoru C++ a vlastností sestavení v sadě Visual Studio.
Vyberte stránku vlastností optimalizace linkeru >konfigurace.>
Změňte některou z těchto vlastností:
Povolit skládání COMDAT
Odkazy
Nastavení parametru linkeru OPT:LBR ve vývojovém prostředí sady Visual Studio
Otevřete dialogové okno Stránky vlastností projektu. Podrobnosti najdete v tématu Nastavení kompilátoru C++ a vlastností sestavení v sadě Visual Studio.
Vyberte stránku vlastností linkeru>Vlastností konfigurace>příkazového řádku.
Zadejte možnost v části Další možnosti:
/opt:lbr
nebo/opt:nolbr
Programové nastavení tohoto parametru linkeru
- Zobrazit EnableCOMDATFolding a OptimizeReferences vlastnosti