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 :

Intégrer x fois une fonction d'un .LIB dans l'exe


Sujet :

C++

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    905
    Détails du profil
    Informations personnelles :
    Localisation : France, Vienne (Poitou Charente)

    Informations forums :
    Inscription : Mai 2011
    Messages : 905
    Points : 85
    Points
    85
    Par défaut Intégrer x fois une fonction d'un .LIB dans l'exe
    Bonjour,
    Je crois que je n'aurais pas de réponse pour ce sujet

    Quand on link une fonction d'un LIB , elle est intégré une seule fois dans l'exe.

    Est t'il possible d'inliner la fonction d'un LIB (sans son code source) , c'est à dire dans mon prog quand je l'appelle x fois , elle est incluse x fois dans mon l'exe (repetter x fois), est - ce possible ?????

    Sinon il y a les .h avec la directive inline , mais c'est un peu le bordel , le linker met 2 minutes à linker car j'ai beaucoup de fonctions à inliner et certaines sont complexes à compiler et à linker.


    Merci ;

  2. #2
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2008
    Messages : 22
    Points : 16
    Points
    16
    Par défaut
    Bonjour,

    sauf erreur de ma part il me semble que le inline est géré a la compilation et donc la fonction appelle ne sera pas inline dans ton executable apres linkage.

    D'ailleurs c'est une autre question, mais est-ce que le contenu d'une fonction inline presente dans une librairie et appellee dans un programme sera inclu dans l’exécutable ou seulement l'appel a cette fonction sera present ?

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 59
    Points : 120
    Points
    120
    Par défaut
    Salut

    inline est une indication au compilateur pour qu'il remplace les appels à la fonction par le corps de cette fonction (en final ça donne ce qu'on peut avec avec des #define, le typage en plus)
    si la fonction est effectivement inlinée c'est bien le contenu de la fonction qui sera écrit à chaque fois et non plus l'appel de la fonction.

    Cdt

  4. #4
    Membre expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Points : 3 156
    Points
    3 156
    Par défaut
    Le compilateur fait un peu ce qu'il veut avec inline il me semble. On lui demande de le faire s'il le peut, mais il décide tout seul.

    A mon avis, le meilleur moyen de résoudre ton problème est... de te plonger dans la doc de ton compilo à ce sujet !
    Find me on github

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

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Salut,

    D'abord, il est important de savoir que le mot clé inline ne fait que demander au compilateur d'inliner la fonction ainsi qualifiée, mais qu'il reste "libre", en fonction de certains de ses réglages, de refuser cette demande (entre autre si le nombre d'instructions processeur à mettre en oeuvre pour y arriver exède le nombre maximal configuré permettant de le faire).

    Ensuite, il faut comprendre que l'inlining impose un certain nombre de conditions, dont, principalement, le fait que le code de la fonction soit accessible lors de la compilation du fichier source dans lequel apparait la fonction inline (autrement, le compilo n'est pas en mesure de remplacer l'appel de la fonction par la fonction elle-même).

    Enfin, il faut se dire que, si les créateurs n'ont pas jugé utile de déclarer une fonction inline, c'est sans doute qu'il y a une raison valable pour ne pas le faire... : à part quelques exceptions relatives à l'utilisation des templates (pour éviter, entre autres, de se retrouver face à des définitions multiples d'une fonction), le gain éventuellement apporté par l'inlining d'une fonction fait vraiment office de "l'optimisation prématurée" qui, comme tout le monde le sait, est la voie de tous les enfers.

    Il ne faut en outre pas oublier le fait que, si tu inline trop de fonctions trop grosses, tu vas, au mieux, gagner quelques ticks d'horloges (les "push" avant l'appel, les "pop" après), mais que cela se fera au prix d'une augmentation parfois excessive du poids de ton exécutable!!!

    Tout cela pour essayer de te faire comprendre qu'il est préférable, avant de vouloir optimiser l'utilisation d'une bibliothèque externe à coup d'inlining, de t'assurer que tes propres algorithmes et ton propre code soit "aussi efficace que faire se peut" : tu gagnera bien plus à éviter appel de fonction qui entre dans trois boucles imbriquées qu'à essayer d'inliner la dite fonction
    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

Discussions similaires

  1. Réponses: 17
    Dernier message: 20/01/2014, 22h04
  2. Linker une fonction d'un .lib
    Par yann458 dans le forum Visual C++
    Réponses: 8
    Dernier message: 19/11/2012, 11h22
  3. Réponses: 6
    Dernier message: 02/11/2011, 09h34
  4. Eval n'exécute qu'une fois une fonction
    Par Gp2mv3 dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 05/09/2011, 16h10
  5. Réponses: 6
    Dernier message: 22/05/2008, 23h15

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