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 :

Guru of the Week n° 33 : le mot clé inline [Tutoriel]


Sujet :

C++

  1. #1
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Points : 15 617
    Points
    15 617
    Par défaut Guru of the Week n° 33 : le mot clé inline
    Contrairement à l'opinion populaire, le mot-clef inline n'est pas une sorte de formule magique. C'est néanmoins un outil utile quand on l'emploie comme il faut. La question est : quand doit-on l'utiliser ?

    Dans cette traduction de Guru of the Week n° 33, Herb Sutter aborde la question du mot clé inline et de l'optimisation précoce.

    Utilisez-vous inline selon ces recommandations ?
    Retrouvez la liste de tous les Guru of the Week sur la page d'index.

  2. #2
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 486
    Points : 13 696
    Points
    13 696
    Billets dans le blog
    1
    Par défaut
    Je remercie les gens pour cette traduction, cela faisait quelques temps que je cherchais une parole fiable sur l'utilisation de inline


    N'ayant (malheureusement) jamais travaillé pour l'instant sur des projets où la vitesse d'exécution était très critique, je n'ai jamais eu besoin d'utiliser inline. Quelques phrases m'ont marquées :
    évitez de mettre inline et de faire tout réglage fin tant que les profils de performances n'ont pas prouvé le besoin (Cline95 : 139-140, 348-351 ; Meyers92 : 107-110 ; Murray93 : 234-235; 242-244) ;
    corollaire : en général, évitez de mettre inline (Lakos96 : 631-632 ; Murray93 : 242-244) ;
    Et cela rejoint parfaitement une idée à laquelle j'adhère totalement et que je sors souvent aux gens que j'aide sur ce forum :
    si vous cherchez à améliorer l'efficacité, commencez toujours par vous pencher sur vos algorithmes et vos structures de données
    Cette phrase devrait être gravée en haut de l'écran de tous les développeurs

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 168
    Points : 140
    Points
    140
    Par défaut
    Je trouve que c'est un des mots clef les plus mystique du C++ car son fonctionnement dépend plus de l'implémentation du compilateur et de ses optimisations que de la norme.

    En tout cas merci pour cette traduction !

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 764
    Points : 2 705
    Points
    2 705
    Par défaut
    Tout comme volatile, encore plus mystique.

  5. #5
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 486
    Points : 13 696
    Points
    13 696
    Billets dans le blog
    1
    Par défaut
    Le mot clé en lui-même n'est pas si mytisque, il dit juste au compilateur de ne pas faire de simplification en supposant une valeur figée de la variable, car celle-ci pourrait être modifiée par autre chose que le programme.

    Ce qui est plus mystique peut-être, c'est de trouver un cas où ça arrive. Ca arrive en programmation bas niveau, quand ta variable donne accès à un registre matériel par exemple. L'exemple des memory-mapped I/O de Wikipedia anglais est intéressant : http://en.wikipedia.org/wiki/Volatil...ped_I.2FO_in_C

    Par exemple, dans un microcontroleur, tu peux accéder à une zone mémoire qui donne la valeur d'un timer, qui change "tout le temps", indépendamment du programme. Imagine dans le premier exemple du lien, que foo est la valeur de ce compteur, et que tu attendes qu'il arrive à 255. Tu serais triste d'avoir un while(1) à la place.

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 131
    Points : 33 074
    Points
    33 074
    Billets dans le blog
    4
    Par défaut
    Effectivement le volatile au moins, on sait ce qu'il fait.
    inline, on sait ce que la théorie propose, en pratique... le compilateur décide ou non.

  7. #7
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 764
    Points : 2 705
    Points
    2 705
    Par défaut
    Ben le comportement de volatile dépend de la plate-forme, alors...

  8. #8
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 486
    Points : 13 696
    Points
    13 696
    Billets dans le blog
    1
    Par défaut
    Que veux-tu dire par là ?

  9. #9
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 764
    Points : 2 705
    Points
    2 705
    Par défaut
    Voir ce fil sur StackOverflow.

  10. #10
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 486
    Points : 13 696
    Points
    13 696
    Billets dans le blog
    1
    Par défaut
    Ce qui se dit dans le fil, c'est surtout que l'exemple du PO n'est pas bon pour montrer l'effet de volatile. Ce mot-clé indique au compilateur de ne pas faire n'importe quoi comme optimisation :
    Citation Envoyé par dirkgently dans le dernier message,
    7.1.6.1 The cv-qualifiers

    7 Note: volatile is a hint to the implementation to avoid aggressive optimization involving the object because the value of the object might be changed by means undetectable by an implementation. See 1.9 for detailed semantics. In general, the semantics of volatile are intended to be the same in C++ as they are in C
    Cela ne veut pas forcément dire que les codes produits avec ou sans seront différents, car peut-être que le compilateur ne fera pas d'optimisation problématique même sans le volatile.

    En revanche, ce qui semble intéressant, c'est l'article donné dans la réponse la mieux notée. Je n'en ai lu que l'abstract mais les problèmes semblent venir des compilateurs et non des plate-formes en elles-mêmes. Je vais lire cet article, il a l'air bien intéressant !

  11. #11
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 764
    Points : 2 705
    Points
    2 705
    Par défaut
    Le problème vient pas de la compilation, mais de l'interprétation par le matériel du code compilé.

  12. #12
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 282
    Points : 11 036
    Points
    11 036
    Par défaut
    Citation Envoyé par Bktero Voir le message
    Que veux-tu dire par là ?
    Que VC++ en a détourné la sémantique officielle pour lui conférer des propriétes des std::atomics<>.
    Ce qui permet p.ex. de définir un singleton thread-safe avec VC++ grâce à volatile.

  13. #13
    Membre éclairé
    Avatar de Ekleog
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    448
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 448
    Points : 879
    Points
    879
    Par défaut
    VC++ fait de l'excès de zèle ?

    Parce que, pour autant que je sache, rendre volatile similaire à atomic reste tout de même un comportement standard. Même si on peut se demander pourquoi.
    Mais un code qui compile (et fonctionne) avec un volatile "normal" (i.e. se limitant aux restrictions du standard) devrait aussi fonctionner avec la mode VC++-like.
    Non ?

  14. #14
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 764
    Points : 2 705
    Points
    2 705
    Par défaut
    Au fait, comment navigue-t-on vers ces articles sans disposer des liens directs ??

    Manifestement, ce n'est pas dans la section Blog.

  15. #15
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Points : 15 617
    Points
    15 617
    Par défaut
    Citation Envoyé par oodini Voir le message
    Au fait, comment navigue-t-on vers ces articles sans disposer des liens directs ??

    Manifestement, ce n'est pas dans la section Blog.
    Bonjour
    Tu as un lien vers la page d'index dans le synopsis de chaque article : http://cpp.developpez.com/gotw
    Je vais également ajouter une entrée dans la page de cours
    ++

Discussions similaires

  1. Guru of the Week n° 35 : le mot-clé typename
    Par gbdivers dans le forum C++
    Réponses: 8
    Dernier message: 12/07/2012, 18h23
  2. Guru of the Week 104
    Par gbdivers dans le forum C++
    Réponses: 15
    Dernier message: 25/04/2012, 16h27

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