Dix ans d'ignorance

En regardant cette présentation , j'ai fait plus qu'apprendre une chose, j'ai surtout corrigé une misconception flagrante. Dans mon esprit, quand des fonctions non appelées dans un programmes sont compilées, elles disparaissent du programme final. C'est le comportement par défaut en Pascal, et mes années Delphi m'y ont habitué. Mais ce n'est pas le cas partout. Mais comme l'explique l'intervenant, depuis l'origine d'Unix, le linker à toujours géré les sections de code comme un container unique de symboles. Par défaut, il intègre tous les fichiers objets qui lui sont passés... Grâce à l'option du linker ??-gc-sections??, on peut déjà éliminer les sections dont aucune fonction n'est appelée mais si un symbole du container est appelé, alors tout le container est inclus dans le code final. Pour mimer le fonctionnement de Pascal, il faut en plus passer à gcc les options ??-ffunction-sections -fdata-sections?? pour le forcer à mettre chaque fonction et chaque variable globale dans sa propre section et ainsi permettre au linker de laisser choir les fonctions non appelées. Cependant, et la conférence ne l'aborde pas, cette option a des effets néfastes sur les capacités de debug et de profilage. Bref, je présente mes excuses aux personnes nombreuses à qui j'ai pu soutenir que gcc avait une intelligence intégrée qu'il ne présente effectivement pas.

GodSlayer Tuesday 14 September 2010 at 10:00 pm | | Logiciels libres

No comments

(optional field)
(optional field)
Remember personal info?
Small print: All html tags except <b> and <i> will be removed from your comment. You can make links by just typing the url or mail-address.