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 :

Inline et inline-limit


Sujet :

Langage C++

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Juillet 2008
    Messages : 26
    Points : 27
    Points
    27
    Par défaut Inline et inline-limit
    Bonjour,

    J'essaie de porter une librarie dynamique C++ trés consommatrice d'inline sous android avec le ndk (r5b).

    Je pense que mon problème est strictement C++.

    Par défaut le compilateur à un inline-limit=64, largement insuffisant pour la librairie.
    Lors de la compilation avec le flag Winline, j'ai des warnings du style "--param max-inline-insns-single" et "call is unlikely and code size would grow"

    J'ai réglé le premier en augmentant les limites inline (600 et plus).

    Pour le second, je sais qu'il signifie que l'inline est inutile (mais le code est-il quand même généré?)

    Au finale, si j'augmente les limitations, le nombre de symbole que ma lib possède diminue, pourquoi?

    Merci,
    frankois

  2. #2
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Salut,

    Si le code d'une fonction f est inliné partout où f est invoquée (et que f n'est pas une fonction exportée) alors la fonction f n'a plus lieu d'être intégrée à l'exécutable. Donc le symbole n'existe plus. C'est pour cela que tu vois baisser le nombre de symbole lorsque augmentent les inline.

    Si une fonction demandée inline par le codeur avec le mot clé inline n'est au final pas inlinée par le compilateur (par expl car elle ne répond pas aux contraintes spécifiées par options de compil => fct trop grande), alors une fonction est produite et l'appel vers cette fonction est générée. Donc pas de soucis, le code sera bien exécuté.

    inline sert à indiquer aussi à gérer les éventuelles multiple définition qu'il peut y avoir d'une fonction définie dans un .h qui serait inclus par plusieurs .cpp.

    inline c'est en général très utile en méta-prog pour ses 2 raisons d'êtres (inlining de code et éviter la redéfinition)

    Hors contexte générique, je n'aime pas inline car il ajoute du couplage entre les modules.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Juillet 2008
    Messages : 26
    Points : 27
    Points
    27
    Par défaut
    J'ai résolus mon problème en supprimant les optimisations avec -O0.

  4. #4
    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
    un effet de bord de l'utilisation des inline se traduit par l'augmentation de la taille du code, si la taille en instructions du corps de la fonction dépasse celui nécessaire pour son invocation et que la fonction inlinée est massivement utilisée

    call is unlikely and code size would grow
    je le comprends comme : la fonction sera inliné (plus de symbols, plus d'appel) mais la taille du code va augmenter.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Free Pascal] [Linux] Limitation Inline Assembler
    Par Invité dans le forum Free Pascal
    Réponses: 2
    Dernier message: 23/02/2012, 21h14
  2. Réponses: 8
    Dernier message: 15/02/2005, 19h02
  3. Problème avec les inlines, et block
    Par Oberown dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 16/12/2004, 12h03
  4. [DevC++]Assembleur inline
    Par Lung dans le forum Dev-C++
    Réponses: 6
    Dernier message: 21/08/2003, 16h45
  5. [Turbo C++] Fonciton containing for are not expanded inline
    Par BuG dans le forum Autres éditeurs
    Réponses: 6
    Dernier message: 17/02/2003, 06h48

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