fonction "inline"

fonction "inline" - C++ - Programmation

Marsh Posté le 23-11-2004 à 19:08:53    

Bonjour à tous,
j'aimerais connaître l'avantage et les inconvénients à mettre des fonctions "inline".
 
Il me semble avoir lu qq part que si une fonction ne peut pas être "inline" (style parce que trop grosse) elle ne le sera pas même si l'ordre de la mettre "inline" y est. Cette caractéristique m'autorise-t-elle à tout déclarer "inline" et laisser le compilo décider lui-même quoi mettre et quoi ne pas mettre "inline" ?


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 23-11-2004 à 19:08:53   

Reply

Marsh Posté le 23-11-2004 à 19:20:09    

l'avantage: ben c'est dans la définition : le corps de la fonction peut-être substitué à l'appel.
 
Si la fonction est très courte (en terme d'instruction) cela permet un gain, car on économise le surcout de l'appel de fonction.
 
exemple

Code :
  1. inline int negate_it(int i) { return -i; }


 
seulement si ta fonction que tu inlines est trop grosse, tu n'a plus de gain et ton exécutable prend du poids (multiples définitions de ta fonction. également, dans le cadre d'une bibliothèque, les fonctions inline sont plus difficiles à gérer en ce qui concerne l'API et l'ABI

Reply

Marsh Posté le 23-11-2004 à 19:21:26    

tout d'abord le fait de marquer une fonction inline n'est pas un ordre au compilo, c'est un conseil.
 
l'inlining consiste a "copier" le contenu de la fonction partout ou elle sera appelée au lieu de la mettre a un seul endroit et de l'appeler.
 
L'avantage majeur (il y en a p-e d'autres) : la rapidité
L'inconvenient majeur (pareil) : la taille du code


---------------
-( BlackGoddess )-
Reply

Marsh Posté le 23-11-2004 à 19:22:06    

Reply

Marsh Posté le 23-11-2004 à 19:22:32    

bref : non, ne mets inline que si tu en as besoin. Dans une première phase de développement, tu peux carrément faire sans inline, tu pourras revenir dessus plus tard après une première évaluation des performances

Reply

Marsh Posté le 23-11-2004 à 20:41:10    

BlackGoddess a écrit :

tout d'abord le fait de marquer une fonction inline n'est pas un ordre au compilo, c'est un conseil.
 
l'inlining consiste a "copier" le contenu de la fonction partout ou elle sera appelée au lieu de la mettre a un seul endroit et de l'appeler.
 
L'avantage majeur (il y en a p-e d'autres) : la rapidité
L'inconvenient majeur (pareil) : la taille du code


Notez que code plus grand => code plus lent à cause des problèmes de cache mémoire.

Reply

Marsh Posté le 23-11-2004 à 20:50:53    

La mise en inline est une phase d'opti comme ça a été dit, sauf cas trivial. Si tu mets d'emblée en inline, tu es obligé de fournir la définition de ta fonction dans un .h et tu recompiles donc beaucoup plus de code à chaque modification, ce qui est pénible.

Reply

Marsh Posté le 23-11-2004 à 22:44:54    

Ok - Merci à tous. J'ai compris des trucs
 
PS: Le lien cité par "Joel F" http://www.parashift.com/c++-faq-l [...] tions.html ne fonctionne pas actuellement...


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 23-11-2004 à 22:46:25    

Si, j'en viens [:autobot]

Reply

Marsh Posté le 23-11-2004 à 22:48:11   

Reply

Marsh Posté le 26-11-2004 à 19:00:21    

Joel F a écrit :

Si, j'en viens [:autobot]


Argh, c'est mon firewall qui me bloquait ce lien !!![:autobot][:autobot]
Ok thx all

Reply

Marsh Posté le 26-11-2004 à 21:00:49    

inline est ignoré par certains compilos, et certains arrivent même à s'en passer (inlining depuis le fichier objet). Son utilité est un peu celle de register il y a quelques années. De même que register ne sert plus à rien aujourd'hui, inline sera bientôt inutile.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 26-11-2004 à 21:20:52    

sans doute, mais aujourd'hui, c'est loin d'être inutile. À part le compilateur d'intel, je ne connais rien d'autre qui fasse ça tout seul. Et c'est très dépendant de l'heuristique employée. Donc je pense pas que ça soit inutile. Cela dit, tu peux avoir une approche 'j'inline rien' sans problème : y a des tas de langages sur VM (perl, java, python, etc) ou la notion d'inline n'existe pas et ils vivent sans.

Reply

Marsh Posté le 26-11-2004 à 21:37:09    

Les langages sur VM c'est différent, et c'est là qu'ils peuvent être plus performants que des langages compilés car ils savent mieux inliner.
Pour les compilos C++ inlineurs y'a VC++ aussi, en compilant avec l'option "whole optimization" (/GL).
http://www.microsoft.com/france/ms [...] ation.html
http://www.codeproject.com/tips/gloption.asp


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 26-11-2004 à 22:28:58    

même, de toutes façons, inline porte aussi la notion de définition locale à l'unité de compilation

Reply

Marsh Posté le 26-11-2004 à 23:27:32    

Moui... et ça apporte quoi ?
Ce que je voulais dire jusque là c'est que inline généralement c'est des économies de bouts de chandelles, c'est rare que ça ait un impact mesurable. En revanche ça pourri bien le fichier .h et moi c'est ce qui me gêne.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 26-11-2004 à 23:31:33    

Nan, ça change énormément de choses l'inlining. Tu économises la génération des cadres de piles, les call/ret, et tu peux optimiser en interne.  
 
On a fait des tests au boulot sur Forte entre "-g -xO3" et "-g0 -xO3" (autorise l'inlining du debug). C'était entre 40 et 50% plus rapide.

Reply

Marsh Posté le 26-11-2004 à 23:33:31    

l'inlining fait par le compilo ou l'utilisation du mot clé inline ?


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 26-11-2004 à 23:35:21    

HelloWorld a écrit :

l'inlining fait par le compilo ou l'utilisation du mot clé inline ?


Fait par le compilo. Quoique j'ai pas regardé, mais la STL qu'on utilisait devait être truffée de inline.


Message édité par Lam's le 26-11-2004 à 23:35:33
Reply

Marsh Posté le 26-11-2004 à 23:35:22    

le mot clef inline.

Reply

Marsh Posté le 26-11-2004 à 23:36:04    

(surtout sur une architecture ou on a plein de registres, ça donne vraiment gavé de d'accélération)

Reply

Marsh Posté le 26-11-2004 à 23:41:16    

Heu faudrait se mettre d'accord. Moi je dit que l'inlining géré par le compilo est assez bien pour ne pas s'emmerder avec le mot clé inline.
 
En plus qui dit STL dit template donc dit code source dans le .h donc dit pas besoin de inline :o


Message édité par HelloWorld le 26-11-2004 à 23:42:24

---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 26-11-2004 à 23:44:29    

mais les deux sont utiles, mais il faut se métier du compilateur qui peut t'inliner des fonctions à la con non-critiques et faire péter ton segment de texte. Le tout, c'est de maitriser à peu près le phénomène

Reply

Marsh Posté le 07-12-2004 à 10:57:49    

Bonjour, Je travail sur matlab et je ne commais rien sur C++
le probleme je viens de recevoir un programme sur c++ et je veux le transformer en point .m pour pouvoir l utiuliser sur matlab
si possible de votre part, merci de me comminiquer votre adress mail, je vous enverais en piece jointe le program
merci A+

Reply

Marsh Posté le 07-12-2004 à 11:01:19    

le rapport avec la choucroute ???

Reply

Marsh Posté le 07-12-2004 à 11:02:39    

Et pour le cheque on te donne notre adresse par mail aussi ?


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 07-12-2004 à 11:04:49    

Je travail un peut sur matlab, besoin d aide
Je suis en train de traiter des images en 2D. (0-255)
 
L objectif est de contourner les lignes de hautes intensites a l interieur de l image. Je sais qu on peux utiliser la fonction contour, mais ca ne marche pas bien, car les lignes que je trouves restes trop vaques et la localisation n est pas facile.
Si quelqu un peux m aider a trouver et localiser les lignes de hautes intensite a linterieur des ces images ?
merciA+
 

Reply

Marsh Posté le 07-12-2004 à 11:25:43    

Fait un post à part STP, car ça n'a strictement rien à voir avec le sujet d'origine ...
Et un conseil soit plus clair que ça ...

Reply

Marsh Posté le 07-12-2004 à 13:17:19    

OK, There
This how it works (Mr, Cricri and Hello world), I believe that you are very intelligent French gay. I am sorry I am anatomist and I am not sure that you can understand what I am doing neither, However if you ask me advices I will be for sure nice to you> Anyway I don’t need your helps> Many thanks
 

Reply

Marsh Posté le 07-12-2004 à 13:21:08    

ils te disent juste de créer un nouveau sujet pour ton probleme car il n'a rien à voir avec ce dont ils discutent :spamafote:


---------------
Quizz'n'Blind pour tester vos connaissances
Reply

Marsh Posté le 07-12-2004 à 13:27:24    

Jhon1 a écrit :

OK, There
This how it works (Mr, Cricri and Hello world), I believe that you are very intelligent French gay. I am sorry I am anatomist and I am not sure that you can understand what I am doing neither, However if you ask me advices I will be for sure nice to you> Anyway I don’t need your helps> Many thanks

ta chatte :o

Reply

Marsh Posté le 07-12-2004 à 13:33:56    

Citation :

I believe that you are very intelligent French guy


[:aloy]
 
Tu veux savoir comment ça fonctionne ? Ben c'est un forum : tu crées un sujet, les gentils gens collaborent et t'aident à le faire. Poster sa question à la suite d'une autre en demandant à quelqu'un de le faire à ta place par mail c'est pas très bien vu.
Et c'est un forum francophone, ça veut dire qu'on discute en français, mais pas forcément entre français. Y'a des belges, des suisses, des québéquois ici.


Message édité par HelloWorld le 07-12-2004 à 13:35:42

---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 07-12-2004 à 13:38:54    

c'est quoi ce bordel ici :heink:


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 07-12-2004 à 13:40:22    

HelloWorld a écrit :

Citation :

I believe that you are very intelligent French guy


[:aloy]
 
Tu veux savoir comment ça fonctionne ? Ben c'est un forum : tu crées un sujet, les gentils gens collaborent et t'aident à le faire. Poster sa question à la suite d'une autre en demandant à quelqu'un de le faire à ta place par mail c'est pas très bien vu.
Et c'est un forum francophone, ça veut dire qu'on discute en français, mais pas forcément entre français. Y'a des belges, des suisses, des québéquois ici.


Là, il vient d'apprendre comment fonctionne le TT...
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed