Condividi tramite


/OPT (Ottimizzazioni)

Aggiornamento: novembre 2007

Controlla le ottimizzazioni che vengono eseguite da LINK durante una generazione.

/OPT:{REF | NOREF}
/OPT:{ICF[=iterations] | NOICF}
/OPT:{WIN98 | NOWIN98}

Argomenti

  • REF | NOREF
    Con /OPT:REF vengono eliminati dati e/o funzioni a cui non viene mai fatto riferimento, mentre con /OPT:NOREF tali dati e/o funzioni vengono mantenuti.

    Per impostazione predefinita, le funzioni di package senza riferimenti vengono rimosse. Un oggetto contiene funzioni di package (COMDAT) se è stato compilato con l'opzione /Gy. Tale ottimizzazione viene denominata eliminazione COMDAT transitiva. Per eseguire l'override di questa impostazione predefinita e mantenere i COMDAT senza riferimenti nel programma, specificare /OPT:NOREF. È possibile utilizzare l'opzione /INCLUDE per eseguire l'override della rimozione di un simbolo specifico.

    Se è specificata l'opzione /DEBUG, l'impostazione predefinita per /OPT è NOREF (in caso contrario, è REF) e tutte le funzioni vengono conservate nell'immagine. Per eseguire l'override dell'impostazione predefinita e ottimizzare una generazione di debug, specificare /OPT:REF. L'opzione /OPT:REF disattiva il collegamento incrementale.

    È necessario contrassegnare in modo esplicito i dati come COMDAT. Utilizzare __declspec(selectany).

    Se si specifica l'opzione /OPT:REF, /OPT:ICF è attivo per impostazione predefinita. Se si desidera specificare /OPT:REF ma non /OPT:ICF, è necessario scrivere il seguente codice:

    link /opt:ref /opt:noicf
    

    La specifica di /OPT:ICF non determina l'attivazione dell'opzione /OPT:REF.

  • ICF[= iterations**] | NOICF**
    Utilizzare /OPT:ICF[=iterations] per eseguire la riduzione di COMDAT identici. I COMDAT ridondanti possono essere rimossi dall'output del linker. In iterations viene specificato il numero di volte in cui scorrere i simboli per individuare duplicati. Il numero predefinito di iterazioni è due. Le iterazioni aggiuntive potrebbero individuare duplicati rivelati dalla riduzione effettuata nell'iterazione precedente.

    Si noti che il comportamento del linker è differente se ICF è attiva per impostazione predefinita con l'opzione /OPT:REF specificata esplicitamente o se invece /OPT:REF,ICF viene specificata in modo esplicito. L'opzione predefinita ICF con /OPT:REF non determina la riduzione di dati di sola lettura, inclusi .rdata, .pdata e .xdata. Tuttavia, l'opzione ICF predefinita con /OPT:REF causa la riduzione di un numero inferiore di funzioni quando si creano immagini per Itanium e x64 poiché le funzioni in questi moduli presentano maggiore dipendenza da dati di sola lettura, quali .pdata e .xdata. Per ottenere la funzionalità completa di ICF, specificare /OPT:ICF in modo esplicito.

    Le funzioni vengono inserite nei COMDAT con l'opzione del compilatore /Gy e i dati const vengono inseriti nei COMDAT. Per un esempio su come specificare i dati per la riduzione, vedere selectany.

    ICF è attivata per impostazione predefinita se REF è attiva e deve essere attivata in modo esplicito in una build di debug. È possibile specificare NOICF se è specificata REF.

    Nota:

    /OPT:ICF può comportare l'assegnazione dello stesso indirizzo a funzioni differenti o a membri dati di sola lettura (variabili const compilate con /Gy). Di conseguenza, /OPT:ICF può interrompere un programma che dipende dall'indirizzo di funzioni o di membri dati di sola lettura differenti. Per ulteriori informazioni, vedere /Gy (Attiva collegamento a livello di funzione).

  • WIN98 | NOWIN98
    WIN98 e NOWIN98 consentono di controllare l'allineamento di sezioni nell'immagine finale. Per le applicazioni Windows 98, è ottimale allineare sezioni su un limite di 4 KB per migliorare il tempo di caricamento, consentendo in questo modo al gestore di memoria di Windows 98 di inserire nella memoria cache immagini eseguibili con una quantità minima di spazio inutilizzato. Poiché questa impostazione è attiva nel linker per impostazione predefinita, è necessario specificare /OPT:NOWIN98 per ottenere una versione ridotta dell'applicazione, ma più lenta su Windows 98.

    WIN98 è attivo per impostazione predefinita. WIN98 non è attivo quando:

    • /ALIGN viene utilizzata.

    • /MACHINE non è destinata a x86.

    • /SUBSYSTEM specifica impostazioni diverse da WINDOWS o CONSOLE.

    /OPT:WIN98 non viene attivata automaticamente per le immagini le cui dimensioni, in base alle equazioni di crescita media riportate di seguito, aumentano di oltre il 25 percento. In altri termini, /OPT:WIN98 non viene attivata per immagini di piccole dimensioni. È necessario attivare /OPT:WIN98 in modo esplicito per evitare che si verifichi quanto descritto. Specificare /OPT:NOWIN98 per ottenere una versione ridotta dell'applicazione, ma più lenta su Windows 98.

    I miglioramenti in Windows 98 sono efficaci solo quando le sezioni di un'immagine eseguibile portabile iniziano su un limite di pagina. L'opzione /OPT:WIN98 esegue l'allineamento file necessario.

    Se si generano componenti da eseguire solo in Windows NT o Windows 2000, si consiglia di utilizzare /OPT:NOWIN98.

    Questa modifica non influisce sul caricamento di immagini o del working set del processo, ma solo sulla dimensione su disco.

    Di seguito sono riportate informazioni utili per calcolare la crescita media di un'immagine quando si utilizza /OPT:WIN98:

    • Per conoscere lo spazio inutilizzato medio per l'allineamento file di 4096 byte, è possibile effettuare il seguente calcolo: numero-sezioni-in-immagine x 4096/2

    • Lo spazio inutilizzato medio per l'allineamento file di 512 byte è: numero-sezioni-in-immagine x 512/2

    Pertanto la crescita è:

    • Incremento-numero-di-byte = numero-sezioni-in-immagine x (4096/2 - 512/2)

      o, più semplicemente,

      Incremento-numero-di-byte = numero-sezioni-in-immagine x 1792

      In questo calcolo non viene tuttavia considerato che all'intestazione dell'immagine è necessario aggiungere l'allineamento della sezione. Dal momento che l'intestazione non è mai maggiore di 512 byte, l'incremento ulteriore sarà una costante di 4096 - 512, ovvero 3584.

    • Incremento medio numero di byte = numero-sezioni-in-immagine x 1792 + 3584

    • Incremento massimo numero di byte = numero-sezioni-in-immagine x (4096 - 512 + 3584

    Per ottenere il numero delle sezioni, utilizzare lo strumento DUMPBIN su un file eseguibile. Nel riepilogo verrà riportato l'elenco di sezioni dell'immagine. In genere sono presenti da 3 a 5 sezioni in più rispetto al valore indicato.

    L'unica situazione in cui si consiglia di non utilizzare /OPT:WIN98 è quando l'immagine eseguibile portabile è di dimensioni molto ridotte. Anche se un'immagine è destinata al download, infatti, lo spazio inutilizzato viene riempito di zeri e pertanto può essere compresso in modo ottimale.

Note

Con le ottimizzazioni viene in genere ridotta la dimensione dell'immagine e aumentata la velocità del programma, aumentando però anche i tempi necessari per il collegamento.

È possibile utilizzare l'opzione /VERBOSE per verificare le funzioni rimosse da /OPT:REF e le funzioni ridotte da /OPT:ICF.

Per impostare l'opzione del linker nell'ambiente di sviluppo di Visual Studio

  1. Aprire la finestra di dialogo Pagine delle proprietà del progetto. Per informazioni dettagliate, vedere Impostazione delle proprietà dei progetti Visual C++.

  2. Selezionare la cartella Linker.

  3. Fare clic sulla pagina delle proprietà Ottimizzazione.

  4. Modificare una delle seguenti proprietà:

    • Attiva riduzione COMDAT

    • Ottimizza per Windows 98

    • Riferimenti

Per impostare l'opzione del linker a livello di codice

Vedere anche

Riferimenti

Impostazione delle opzioni del linker

Opzioni del linker