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

Langage C++ Discussion :

Abus de template et conséquences


Sujet :

Langage C++

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 199
    Points : 106
    Points
    106
    Par défaut Abus de template et conséquences
    Bonsoir,

    N'en déplaise à personne avec ce titre, mais j'aurais aimé savoir si l'abus de template pouvait causer des ralentissement à l'éxécution (avec tous ces inline par exemple)?
    En effet, me librairie est composé d'un bon nombre de classe template, et pouvoir ainsi avoir le choix entre un traitement avec des floats ou des doubles.

    Un temps de compilation même fortement accrue ne me dérange pas, j'ai tout mon temps

    Merci d'avance!

  2. #2
    Expert confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Points : 4 551
    Points
    4 551
    Par défaut
    Oui et non.

    Oui parce que dans certains cas précis, tu va rencontrer le même phénomène déjà connu lorsqu'on déroule une boucle : on dépasse la taille du cache code, ce qui va nécessiter des reloads du cache.

    Non, parce que dans la plupart des cas, les fonctions inlinées sont très courtes, et que l'alternative est un appel de fonction, nettement plus lourd.

    Dans tous les cas, ce type d'information s'obtient en profilant le code.
    [FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
    Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
    Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

  3. #3
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Petite chose, le code des templates n'est pas forcément inline.
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 199
    Points : 106
    Points
    106
    Par défaut
    Merci pour vos réponse.

    Oui je sais que même si l'implémentation des fonctions templates comportent un inline, c'est le compilateur qui à le dernier mot.

    Je pensais qu'il y avait plus de considérations qui rentrait en jeu, au tant pour moi alors

    Bonne soirée a tous!

  5. #5
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par victor_gasgas Voir le message
    Oui je sais que même si l'implémentation des fonctions templates comportent un inline, c'est le compilateur qui à le dernier mot.
    Je voulais dire que dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    template <typename T> int f(T) { return 42; }
    template<typename T> class F {
       static int g(T);
    };
     
    template <typename T> int F::g(T) { return 34 /* 042 */; }
    ni f ni g ne sont inlines (ou plus précisément, les instanciations ne seront pas inline, f et g n'étant pas des fonctions mais des templates de fonctions), même au sens C++.
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 199
    Points : 106
    Points
    106
    Par défaut
    Citation Envoyé par Jean-Marc.Bourguet Voir le message
    ni f ni g ne sont inlines (ou plus précisément, les instanciations ne seront pas inline, f et g n'étant pas des fonctions mais des templates de fonctions), même au sens C++.
    J'ai du mal un peu de mal à comprendre pourquoi dans ton exemple les instanciations ne serait pas inliner des fonctions f et g.

    J'avoue qu'une explication ne serait vraiment pas de refus s'il te plait.

  7. #7
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Il y a deux sens a "inline".

    Un sens définit par le langage. Et ces fonctions ne correspondent pas (il faudrait soit le mot cle inline, soit mettre la definition dans la classe pour F::g).

    Une technique d'implementation (le compilateur ne genere pas un appel mais insere le code de la fonction a la place).

    Normalement, rendre une fonction inline au sens C++ est une indication au compilateur qu'il devrait utiliser la technique d'implementation (et une aide a celle-ci car la definition de la fonction est plus facilement accessible). Mais rien ne force le compilateur a le faire. Rien ne l'empeche de le faire meme si la fonction n'est pas inline au sens C++.
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 199
    Points : 106
    Points
    106
    Par défaut
    D'accord je te remercie beaucoup. Sujet résolu.

    Bonne soirée à tous!

Discussions similaires

  1. [Templates] Quel système utilisez-vous ? Pourquoi ?
    Par narmataru dans le forum Bibliothèques et frameworks
    Réponses: 270
    Dernier message: 26/03/2011, 00h15
  2. appliquer plusieurs templates
    Par Manu_Just dans le forum XSL/XSLT/XPATH
    Réponses: 7
    Dernier message: 04/04/2003, 16h26
  3. template match="node() mais pas text()"
    Par Manu_Just dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 26/03/2003, 10h52
  4. Réponses: 2
    Dernier message: 23/12/2002, 20h34
  5. [XSLT] template
    Par demo dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 09/09/2002, 11h31

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