2009-03-10 4 views
18

Cosa c'è da guadagnare dall'uso di questo switch in una soluzione VS di grandi dimensioni (progetti 200 VC)?Collegamento a livello di funzione (/ Gy switch in VC++) - A cosa serve?

Da quello che ho capito, questo riguarda principalmente la dimensione dei binari risultanti; ma a parte i binari più piccoli, la FLL potrebbe anche aiutare a ridurre le dipendenze tra i progetti?

In che modo la FLL di solito influisce sui tempi di costruzione?

Apprezzerei anche una spiegazione istruita su FLL in VC. La spiegazione di MSDN è piuttosto breve.

+1

Per aggiungere all'eccellente post di mwigdahl: [qui] (https://ribosome.helixcommunity.org/2005/devdocs/FuncLevelLinking) 'un link che spiega come ottenere FLL per g ++ - questo potrebbe darti qualche altro intuizioni. – dirkgently

risposta

26

Dato che hai collegato la spiegazione di MSDN, sai che/Gy assicura che tutte le funzioni siano impacchettate nel proprio COMDAT. Il vantaggio principale di questo è che se si hanno funzioni identiche il linker può comprimerle tutte in un unico pezzo di codice ("piegatura COMDAT"). Questo può avere un impatto molto grande quando si hanno molte funzioni identiche, il che è spesso il caso quando si scrive un C++ moderno che è pesante sui modelli.

A parte la dimensione ridotta dell'eseguibile risultante a causa del piegamento COMDAT e dell'eliminazione dei COMDAT senza riferimento, non vi sono altri effetti di/Gy. Per essere specifici, non aiuta a ridurre le dipendenze tra i progetti.

Il costo è un leggero aumento del tempo di compilazione (simile agli altri flag di ottimizzazione). Di solito non è qualcosa che noterai.

+0

se l'applicazione A fa riferimento a una funzione F1 nella libreria statica B, che risiede (senza/Gy) nella stessa sezione COMDAT con una funzione F2 in B che fa riferimento al simbolo F3 in C, ciò crea una dipendenza tra A e C che altrimenti non essere necessario Se A e B non hanno una dipendenza di progetto su C definita, A non compilerebbe anche se nessun percorso di codice da A riferimenti F3, e questo sarebbe impedito da/Gy. È sbagliato? –