
Envoyé par
Médinoc
Parce que, entre autres, l'inlining peut devenir couteux en perfs si la fonction qui utilise la fonction inlinée devient trop grosse pour tenir dans le cache : D'ou, l'effet inverse de celui espéré...
Je n'ai personnellement encore jamais rencontrer ce phénomène et pourtant je force beaucoup d'inlines pour des fonctions vraiment grosses (parfois appelées qu'à un seul endroit dans le code, mais néanmoins appelées fréquemment dans un calcul). Et justement si je laisse faire le compilo à sa guise, il ne les inline pas et ça s'en ressent sérieusement sur les perfs de parties critiques.
Perso, j'indique toujours explicitement comme inlinable les fonctions désirées (même quand quand la fonction est entièrement définie dans la classe, ce qui peut paraître à première vue inutile). Ca me permet de moduler la signification du mot clé avec des '#define'.
Exemple:
#define inline __forceinline //pour ICL et VC
Ceci dit, je suis toujours à la recherche du moyen pour forcer l'inline sur GCC qui n'en fait décidément qu'à sa tête (la version 3.4 en tout cas, je ne peux pas encore tester la version 4 sous Windows...), et refuse fréquemment de suivre mes consignes.
'__inline' ou '__attribute__((__always_inline__))' n'y changent rien.
Alors je profite de ce topic pour demander si quelqu'un connaît le moyen de forcer GCC à inliner les fonctions désirées. (je ne parle pas de fonctions récursives ou virtuelles ou que sais-je encore..)
Partager