Je suis pas sûr que tu puisses esperer gagner du temps avec les trucs genre LTO. J'ai pas essayé celui de gcc mais j'ai des souvenirs du LTO du compilateur sgi qui effectivement accelerait de façon très spectaculaire la compilation (normal il ne compilait plus vraiment, il stockait une sorte de representation intermediaire dans les .o), jusqu'au moment où il arrivait au link et là c'était parti pour 30 minutes à mouliner. Pareil pour celui de visual c++ me semble-t-il. A chaque fois que tu modifies un petit fichier de rien du tout, tu te retappes un link monstrueux qui reoptimise tout le programme.
quand on a 2000 .o qui instancient le meme template, comment GCC faisait-t-il avant, il dupliquait le code entre chaque .o et la duplication restait après le link ?
ils sont dupliqués dans les .o , en tant que symboles faibles. Le link regroupe les symboles faibles de même nom et au lieu de generer une erreur du genre "le symbole toto est defini dans plusieurs fichiers" il n'en garde qu'un (choisi au hasard , mais si tu n'as pas changé tes flags de compilation en plein milieu du build ils sont identiques). D'autre part si tu compiles tes sources avec -ffunction-sections et que tu linkes avec -Wl,--gc-sections le linker eliminera les fonctions non utilisées
[^] # Re: LinkTimeOptimisation
Posté par Troy McClure (site web personnel) . En réponse à la dépêche Sortie de GCC 4.5. Évalué à 3.
quand on a 2000 .o qui instancient le meme template, comment GCC faisait-t-il avant, il dupliquait le code entre chaque .o et la duplication restait après le link ?
ils sont dupliqués dans les .o , en tant que symboles faibles. Le link regroupe les symboles faibles de même nom et au lieu de generer une erreur du genre "le symbole toto est defini dans plusieurs fichiers" il n'en garde qu'un (choisi au hasard , mais si tu n'as pas changé tes flags de compilation en plein milieu du build ils sont identiques). D'autre part si tu compiles tes sources avec -ffunction-sections et que tu linkes avec -Wl,--gc-sections le linker eliminera les fonctions non utilisées