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
    Débutant  
    Inscrit en
    Novembre 2006
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 073
    Points : 217
    Points
    217
    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 éclairé
    Inscrit en
    Janvier 2005
    Messages
    711
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 711
    Points : 751
    Points
    751

  3. #3
    Débutant  
    Inscrit en
    Novembre 2006
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 073
    Points : 217
    Points
    217
    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 éclairé
    Inscrit en
    Janvier 2005
    Messages
    711
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 711
    Points : 751
    Points
    751
    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
    Débutant  
    Inscrit en
    Novembre 2006
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 073
    Points : 217
    Points
    217
    Par défaut
    tu vois ladifférence que quand tu es un pro, pas un novice comme moi.

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

  7. #7
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 627
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 627
    Points : 30 692
    Points
    30 692
    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

+ 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