compilation d'un inline ?

compilation d'un inline ? - C++ - Programmation

Marsh Posté le 14-10-2003 à 14:47:11    

est-ce que, apres compilation,  
 

Code :
  1. class A
  2. {
  3.   int var;
  4. public:
  5.   inline int Get()
  6.   {
  7.     return var;
  8.   }
  9. };
  10. // plus loin dans le code
  11. A a;
  12. int i = a.Get();


 
sera pareil que
 

Code :
  1. class A
  2. {
  3. public:
  4.   int var;
  5. };
  6. // plus loin dans le code
  7. A a;
  8. int i = a.var;


 
?


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

Marsh Posté le 14-10-2003 à 14:47:11   

Reply

Marsh Posté le 14-10-2003 à 14:48:20    

Peut-être, peut-être pas...


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

Marsh Posté le 14-10-2003 à 14:51:26    

(c'est plus les balises 'code' pour colorer le code ?)
 
ca dépend de quoi ? du compilo ?


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

Marsh Posté le 14-10-2003 à 14:55:47    

cpp
 
ouais ca depend du compilo, du mode compilation (debug / release...). Rien ne force le compilo a faire de l'inline, mais bon, n'importe quel compilo decent inlinera ca

Reply

Marsh Posté le 14-10-2003 à 15:01:24    

Les derniers compilos proposent d'inliner comme ils veulent, en ignorant le mot clé inline.


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

Marsh Posté le 14-10-2003 à 15:02:21    

ok, merci :)


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

Marsh Posté le 14-10-2003 à 15:04:40    

avec le mot cle "inline" (et les fonctions definies dans les header), VC fait une sorte de calcul pour savoir si l'inline vaut le coup. Tu peux "bypasser" (desolé) ce calcul via __forceinline (qui donc, forcera l'inline (quand c'est possible bien sur))
 
(aucune idee du support de ce mot cle sur les autres compilo, don't tape on my tete)
 

Reply

Marsh Posté le 14-10-2003 à 15:32:24    

merci pour cette précision :)


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

Marsh Posté le 14-10-2003 à 16:07:29    

mais bon faut pas faire de la parano : si le inline te parait justifier et qu'il a un sens, ton compilo suivra ta directive. pas de soucis, ne remplaces jamais un une fonction par une macro ou le code lui même parce que t'as peur que ton compilo ne fassent pas le boulot

Reply

Marsh Posté le 14-10-2003 à 16:15:13    

Taz a écrit :

mais bon faut pas faire de la parano : si le inline te parait justifier et qu'il a un sens, ton compilo suivra ta directive. pas de soucis, ne remplaces jamais un une fonction par une macro ou le code lui même parce que t'as peur que ton compilo ne fassent pas le boulot


 
Comment ca se fait qu'une fonction inline soit plus rapide ?

Reply

Marsh Posté le 14-10-2003 à 16:15:13   

Reply

Marsh Posté le 14-10-2003 à 16:19:22    

iS@mi a écrit :


 
Comment ca se fait qu'une fonction inline soit plus rapide ?
 


c'est tout un debat ca :D
 
l'appel de fonction est supprimé (en clair, le code la fonction est recopié par le compilo a l'endroit de l'appel)
 
Cela a un gain interessant quand le coup de l'appel de fonction est superieur au temps de traitement de la fonction (typiquement un accesseur)
 
Par contre si la fonction est trop longue certains pensent que tu noie le cache de code de ton CPU ruinant par la meme ton but (et en plus ton exe devient + gros)

Reply

Marsh Posté le 14-10-2003 à 16:20:13    

iS@mi a écrit :


 
Comment ca se fait qu'une fonction inline soit plus rapide ?
 


 
Par ce que le code de la fonction est, en gros, recopié à l'endroit de l'appel ce qui te permet d'économiser sur les mécanismes d'appel de fonctions.
 
Arf [:benou_grilled]


Message édité par LetoII le 14-10-2003 à 16:21:03

---------------
Le Tyran
Reply

Marsh Posté le 14-10-2003 à 16:31:08    

chrisbk a écrit :


c'est tout un debat ca :D
 
l'appel de fonction est supprimé (en clair, le code la fonction est recopié par le compilo a l'endroit de l'appel)
 
Cela a un gain interessant quand le coup de l'appel de fonction est superieur au temps de traitement de la fonction (typiquement un accesseur)
 
Par contre si la fonction est trop longue certains pensent que tu noie le cache de code de ton CPU ruinant par la meme ton but (et en plus ton exe devient + gros)
 


 
En gros le code de l'inline est directement injecté dans celui de la fonction où il est utilisé, ce qui évite d'aller le chercher et donc de perdre du temps ?
 
Mais si j'utilise un exemple 100 fois ce même inline, il sera recopié 100x dans l'application ?


Message édité par iS@mi le 14-10-2003 à 16:31:42
Reply

Marsh Posté le 14-10-2003 à 16:33:03    

iS@mi a écrit :


 
En gros le code de l'inline est directement injecté dans celui de la fonction où il est utilisé, ce qui évite d'aller le chercher et donc de perdre du temps ?
 
Mais si j'utilise un exemple 100 fois ce même inline, il sera recopié 100x dans l'application ?


 
Oui.

Reply

Marsh Posté le 14-10-2003 à 16:54:20    

chrisbk a écrit :


Cela a un gain interessant quand le coup de l'appel de fonction est superieur au temps de traitement de la fonction (typiquement un accesseur)

significatif par rapport au temps d'execution de la fonction est plus correct.
 
note du modérateur : inline se traduit par "Insertion sur place" ce qui est très explicite (si tant est)

Reply

Sujets relatifs:

Leave a Replay

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