IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

[inline] Quelle est la diff�rence entre ces deux codes


Sujet :

C++

  1. #1
    Membre �prouv�
    Inscrit en
    Novembre 2006
    Messages
    1 073
    D�tails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 073
    Par d�faut [inline] Quelle est la diff�rence entre ces deux codes
    celui ci:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
     
     int fac(int n) {
    	return (n<2)?1: n*fac(n-1);
    }
    et celui-ci avec inline?
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
     
    inline int fac(int n) {
    	return (n<2)?1: n*fac(n-1);
    }
    VC2005 donne le meme r�sultat quand je fais f(3) (=6).
    A quoi sert inline?

  2. #2
    Membre �m�rite
    Inscrit en
    Janvier 2005
    Messages
    711
    D�tails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 711

  3. #3
    Membre �prouv�
    Inscrit en
    Novembre 2006
    Messages
    1 073
    D�tails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 073
    Par d�faut
    j'ai pas compris grand chose.

    Quand le compilateur �value l'appel d'une fonction inline, le code complet de cette fonction est ins�r� dans le code de l'appelant (c'est le m�me principe que ce qui se passe avec un #define).

    Dans mon cas, quel est l'appelant.
    Ca veut dire quoi "etre ins�rer dans le code de l'appelant?"

  4. #4
    Membre �m�rite
    Inscrit en
    Janvier 2005
    Messages
    711
    D�tails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 711
    Par d�faut
    si tu definis une fontion, c'est bien pour l'utiliser quelque part. donc tu vas l'appeler dans ton programme, a un moment donn�. dans le cas d'une fonction inline, le code de la fonction sera insere a la compilation a l'endroit ou tu l'as appel�e.

  5. #5
    Membre �prouv�
    Inscrit en
    Novembre 2006
    Messages
    1 073
    D�tails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 073
    Par d�faut
    tu vois ladiff�rence que quand tu es un pro, pas un novice comme moi.

  6. #6
    Membre �m�rite
    Inscrit en
    Janvier 2005
    Messages
    711
    D�tails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 711
    Par d�faut
    je ne suis pas un pro, je te jure que c'est tres loin d'etre compliqu�.

  7. #7
    Expert �minent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activit� : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par d�faut
    Salut,

    La diff�rence entre une fonction "inline" et une fonciton qui ne l'est pas va se jouer au niveau du langage machine, et donc au niveau de la rapidit� d'ex�cution et de la taille finale de l'ex�cutable.

    Pour bien comprendre le principe, il faut avoir ne serait-ce qu'une vague id�e de ce qui se passe du point au niveau de la m�moire, lors de l'appel d'une fonction :

    En simplifiant, juste pour que tu puisse comprendre, il faut savoir que chaque fonction est rep�r�e dans la m�moire par l'adresse � laquelle elle commence.

    Quand on appelle une fonction, une s�rie d'informations - dont entre autres les valeurs qui se trouvent dans les accus et le pointeur sur l'adresse de la prochaine instruction - est pouss�e dans la pile (le "stack"), puis, on signale qu'il faut "sauter" � l'adresse � laquelle commence la fonction appel�e.

    Une fois la fonction finie, les diff�rentes valeurs sont r�cup�r�e dans la pile, remises � leur place d'origine, et on signale qu'il faut "retourner" � l'instruction qui suit l'appel de la fonction.

    Tout cela prend du temps, et on pourrait meme dire, beaucoup de temps... du moins en nombre de fr�quences d'horloges n�cessaire pour y arriver

    Le mot cl� "inline" dit, en gros, au compilateur que
    je sais que c'est une fonction, mais je voudrais que tu ne produise pas un code comme celui qui est utilis� pour appeler une fonction.

    Je pr�f�re que tu ins�re directement les instructions de la fonction � l'endroit de l'appel
    L'avantage �vident, c'est qu'on �vite ainsi toute cette "perte de temps inutile" que repr�sente le fait de pousser les informations dans le stack et de les r�cup�rer ensuite.

    L'inconv�niant, c'est que, souvent, cela peut repr�senter une augmentation notable de la taille de l'ex�cutable, du fait qu'une m�me s�rie d'instructions (celle de la fonction) sera dupliqu�e aussi souvent que la fonction est appel�e dans l'ensemble du code...

    Maintenant, il reste une limite au mot cl� inline...

    En effet, il faut savoir que tu demande au compilateur d'ins�rer directement les instructions de la fonction � l'endroit de l'appel, mais... qu'il n'est pas du tout oblig� de le faire...

    Avec un peu de chance, il le fera, avec un peu moins, il ne le fera pas...

    Pire, il n'est pas impossible qu'il le fasse pour certains appels de la fonction, et qu'il cr�e une fonction, appel�e en tant que telle, pour d'autres appels...

    that's all
    A m�diter: La solution la plus simple est toujours la moins compliqu�e
    Ce qui se con�oit bien s'�nonce clairement, et les mots pour le dire vous viennent ais�ment. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 f�vrier 2014
    mon tout nouveau blog

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Quelle est la diff�rence entre ces deux DSP?
    Par eclipse2007 dans le forum Signal
    R�ponses: 2
    Dernier message: 17/02/2015, 19h26
  2. Quelle est la diff�rence entre ces deux choses
    Par pierrot10 dans le forum jQuery
    R�ponses: 3
    Dernier message: 26/01/2012, 11h37
  3. Quelle est la diff�rence entre ces deux d�clarations ?
    Par sidahmed dans le forum D�buter
    R�ponses: 15
    Dernier message: 04/10/2007, 19h59
  4. Quel est la diff�rence entre ces deux �critures ?
    Par TocTocKi�L�? dans le forum C++
    R�ponses: 5
    Dernier message: 06/08/2007, 14h11
  5. [Conception] Quelle est la diff�rence entre ces mod�les ?
    Par ukanoldai dans le forum XML/XSL et SOAP
    R�ponses: 1
    Dernier message: 10/01/2007, 16h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo