/OPT (optimalizace)
Řídí optimalizace, které program LINK provádí během sestavování.
/OPT:{REF | NOREF}
/OPT:{ICF[=iterations] | NOICF}
/OPT:{LBR | NOLBR}
Argumenty
REF | NOREF
Parametr /OPT:REF odstraní funkce a data, na která se vůbec neodkazuje; parametr /OPT:NOREF je zachová.Při zapnutí parametru /OFT:REF odebere program LINK neodkazované zabalené funkce a data.Objekt obsahuje zabalené funkce a data (sekvence COMDAT), pokud byl zkompilován pomocí parametru /Gy.Tato optimalizace se označuje jako přechodné odstranění sekvence COMDAT.Ve výchozím nastavení je parametr /OPT:REF zapnutý u neladěných sestavení.Chcete-li toto výchozí nastavení přepsat a ponechat v programu neodkazované sekvence COMDAT, zadejte parametr /OPT:NOREF.Pomocí parametru /INCLUDE lze přepsat odebrání určitého symbolu.
Pokud je zapnutý parametr /OPT:REF (explicitně nebo implicitně), je zapnuta omezená forma parametru /OPT:ICF, která skládá pouze identické funkce.Pokud chcete parametr /OPT:REF, ale nikoli parametr /OPT:ICF, musíte zadat buď /OPT:REF,NOICF, nebo /OPT:NOICF.
Při zadání parametru /DEBUG má parametr /OPT výchozí hodnotu NOREF a všechny funkce jsou v bitové kopii zachovány.Chcete-li tuto výchozí hodnotu přepsat a optimalizovat laděné sestavení, zadejte parametr /OPT:REF.Protože při zadáním parametru /OPT:REF se implicitně nastaví parametr /OPT:ICF, doporučujeme zadat také parametr /OPT:NOICF pro zachování identických funkcí v laděných sestaveních.Usnadníte tím čtení trasování zásobníku a nastavení zarážek ve funkcích, které by jinak byly složeny dohromady.Parametr /OPT:REF zakáže přírůstkové propojení.
Data const je třeba explicitně označit jako sekvenci COMDAT; použijte __declspec(selectany).
Při zadání parametru /OPT:ICF se nezapne parametr /OPT:REF.
ICF[= iterations ] | NOICF
Chcete-li provést skládání identických sekvencí COMDAT, použijte /OPT:ICF[=iterations].Redundantní sekvence COMDAT lze odebrat z výstupu linkeru.Volitelný parametr iterations určuje, kolikrát se mají procházet duplicity v symbolech.Výchozí počet iterací jsou dvě.Při dalších iteracích se mohou najít další duplicity, které se odhalí skládáním při předchozí iteraci.Linker se při zadání parametru /OPT:REF chová odlišně – a ICF ve výchozím nastavení platí – než když je parametr /OPT:REF,ICF zadán explicitně.Forma ICF, která je sama o sobě povolena pomocí parametru /OPT:REF, neskládá žádná data určená jen pro čtení, kam patří .rdata .pdata a .xdata.Při vytváření bitových kopií pro x64 je proto složeno méně funkcí, protože funkce v těchto modulech jsou závislejší na datech určených jen pro čtení – například .pdata a .xdata.Chcete-li využít úplné skládání ICF, explicitně zadejte parametr /OPT:ICF.
K umístění funkcí do sekvencí COMDAT se používá parametr kompilátoru /Gy; k umístění dat const se deklaruje __declspec(selectany).Informace o zadání dat ke skládání naleznete v tématu selectany.
Parametr ICF je standardně zapnutý, pokud je zapnutý parametr REF.Chcete-li toto výchozí nastavení při zadání parametru REF přepsat, použijte NOICF.Pokud v laděném sestavení není zadán parametr /OPT:REF a chcete povolit skládání sekvencí COMDAT, musíte explicitně zadat parametr /OPT:ICF.Protože však parametr /OPT:ICF může sloučit identická data nebo funkce, můžete změnit názvy funkcí, které se zobrazují v trasování zásobníku.To také umožní nastavit zarážky v určitých funkcích nebo prozkoumat některá data v ladicím programu a při krokování kódu odhalit neočekávané funkce.V laděných sestaveních proto nedoporučujeme používat parametr /OPT:ICF, pokud výhody menšího kódu nepřeváží tyto nevýhody.
[!POZNÁMKA]
Protože parametr /OPT:ICF může způsobit, že se stejná adresa přiřadí různým funkcím nebo datovým členům určeným jen pro čtení (proměnné const kompilované pomocí parametru /Gy), může to přerušit program, který závisí na jedinečných adresách funkcí nebo datových členů určených jen pro čtení.Další informace naleznete v tématu /Gy (povolení propojení na úrovni funkcí).
LBR | NOLBR
Parametry /OPT:LBR a /OPT:NOLBR platí pouze pro binární soubory ARM.Protože některé větvicí instrukce procesoru ARM mají omezený rozsah, pokud linker zjistí skok na adresu mimo rozsah, nahradí cílovou adresu této větvicí instrukce adresou „ostrůvku“ kódu, jenž obsahuje větvicí instrukci, která míří na skutečné místo určení.Pomocí parametru /OPT:LBR můžete optimalizovat detekci dlouhých větvicích instrukcí a umístění přechodných ostrůvků kódu a minimalizovat celkovou velikost kódu.Parametr /OPT:NOLBR přikáže linkeru generovat ostrůvky kódu pro dlouhé větvicí instrukce bez optimalizace.Parametr /OPT:LBR je standardně nastaven, když není zapnuto přírůstkové propojení.Pokud chcete nepřírůstkové propojení, ale nechcete optimalizaci dlouhých větví, zadejte parametr /OPT:NOLBR.Parametr /OPT:LBR zakáže přírůstkové propojení.
Poznámky
Optimalizace obecně zmenšují velikost bitové kopie a zvyšují rychlost aplikace za cenu delšího propojování.
Pomocí parametru /VERBOSE můžete zobrazit funkce, které jsou odebrány parametrem /OPT:REF, a funkce, které jsou složeny parametrem /OPT:ICF.
Nastavení parametru linkeru OPT:ICF nebo OPT:REF ve vývojovém prostředí sady Visual Studio
Otevřete dialogové okno Stránky vlastností svého projektu.Další informace naleznete v tématu Práce s vlastnostmi projektu.
V levém podokně rozbalte položku Vlastnosti konfigurace, Linker, Optimalizace.
Změňte některou z těchto vlastností:
Povolit skládání sekvencí COMDAT
Odkazy
Nastavení parametru linkeru OPT:LBR ve vývojovém prostředí sady Visual Studio
Otevřete dialogové okno Stránky vlastností svého projektu.Další informace naleznete v tématu Nastavení vlastností projektu Visual C++.
Vyberte složku Linker.
Vyberte stránku vlastností Příkazový řádek.
Zadejte parametr do pole Další možnosti:
/opt:lbr
Programové nastavení tohoto parametru linkeru
- Viz vlastnosti EnableCOMDATFolding a OptimizeReferences.