2009-03-10 5 views
18

Qu'y a-t-il à gagner de l'utilisation de ce commutateur dans une grande solution VS (200 projets VC)? D'après ce que je comprends, cela affecte principalement la taille des binaires résultants; mais mis à part les binaires plus petits, FLL pourrait-il aussi aider à réduire les dépendances entre les projets?Liaison au niveau des fonctions (commutateur/Gy dans VC++) - À quoi sert-il?

Comment FLL affecte généralement les temps de construction?

J'apprécierais également une explication instruite sur FLL dans VC. L'explication de MSDN est assez brève.

+1

Pour ajouter à l'excellent post de mwigdahl: [ici] (https://ribosome.helixcommunity.org/2005/devdocs/FuncLevelLinking) est un lien qui explique comment atteindre FLL pour g ++ - cela peut vous donner quelques autres idées – dirkgently

Répondre

26

Puisque vous avez lié l'explication de MSDN, vous savez que/Gy s'assure que toutes les fonctions sont regroupées dans leur propre COMDAT. Le principal avantage de ceci est que si vous avez des fonctions identiques, l'éditeur de liens peut les réduire en un seul morceau de code ("pliage COMDAT"). Cela peut avoir de très grands impacts quand vous avez beaucoup de fonctions identiques, ce qui est souvent le cas lorsque vous écrivez du C++ moderne qui est lourd sur les templates. En plus de la plus petite taille de l'exécutable résultant du pliage COMDAT et de l'élimination des COMDAT non référencés, il n'y a pas d'autre effet de/Gy. Pour être précis, cela n'aide pas à réduire les dépendances entre les projets.

Le coût est une légère augmentation du temps de compilation (similaire aux autres indicateurs d'optimiseur). Habituellement pas quelque chose que vous remarquerez.

+0

si l'application A référence une fonction F1 dans la bibliothèque statique B, qui réside (sans/Gy) dans la même section COMDAT avec une fonction F2 dans B qui fait référence au symbole F3 dans C, cela crée une dépendance entre A et C qui autrement ne être nécessaire. Si A et B n'ont pas de dépendance de projet sur C défini, A ne compilera pas même si aucun chemin de code de A ne fait référence à F3, et ceci sera évité par/Gy. Est-ce mal? –

Questions connexes