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

GCC Discussion :

"note: code may be misoptimized unless -fno-strict-aliasing is used"


Sujet :

GCC

  1. #1
    Membre régulier

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2003
    Messages : 120
    Points : 82
    Points
    82
    Billets dans le blog
    1
    Par défaut "note: code may be misoptimized unless -fno-strict-aliasing is used"
    Bonsoir !

    suite à une compilation, j'ai ce message
    note: code may be misoptimized unless -fno-strict-aliasing is used
    quelle est l'utilité de l'option "no-strict-aliasing" ?

    merci !
    Ubuntu fan depuis la 8.04
    monnaie libre

  2. #2
    Expert éminent
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 565
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 565
    Points : 7 648
    Points
    7 648
    Par défaut
    Bonjour,

    Le compilateur doit voir une séquence dans ton code contraire au "strict aliasing".
    Le "strict aliasing" est un principe qui peut permettre de grosses optimisation. En gros ça dit que si 2 choses n'ont pas le même type on est sûr qu'elles ne sont pas les même et donc n'ont pas la même adresse. Et grâce à cela, le compilateur pourra enlever des doublons et simplifier des choses. Tu n'a pas précisé le langage, le C et le C++ n'ont pas les même outils pour gérer cela.

    Il faut voir dans ton cas pourquoi. Pour un code "mal écrit" (bidouillant sur des conversions de type trop osées), il faut activer l'option permettant au compilateur se méfier de toute les variables, il sera moins optimisé mais respectera mieux les bidouilles écrites dans le code.

  3. #3
    Membre régulier

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2003
    Messages : 120
    Points : 82
    Points
    82
    Billets dans le blog
    1
    Par défaut
    merci dalfab

    un peu plus en détail :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    /mnt/data1/develop/workspace/sandbox-cpp-2/include/achunk/chunk_c.hpp:19:7: warning: type ‘struct chunk_c’ violates the C++ One Definition Rule [-Wodr]
     class chunk_c final : public chunk_stream_c
           ^
    /mnt/data1/develop/workspace/sandbox-cpp-2/include/achunk/chunk_c.hpp:17:7: note: a type with different bases is defined in another translation unit
     using chunk_upc = std::unique_ptr<const chunk_c>;
           ^
    /mnt/data1/develop/workspace/sandbox-cpp-2/include/achunk/chunk_c.hpp:19:7: note: type ‘struct chunk_c’ itself violates the C++ One Definition Rule
     class chunk_c final : public chunk_stream_c
           ^
    /mnt/data1/develop/workspace/sandbox-cpp-2/include/achunk/chunk_c.hpp:17:7: note: the incompatible type is defined here
     using chunk_upc = std::unique_ptr<const chunk_c>;
           ^
    EDIT : ça reste assez flou pour ma part...

    la partie incriminée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    class chunk_c;
     
    using chunk_up = std::unique_ptr<chunk_c>;
    using chunk_upc = std::unique_ptr<const chunk_c>;
     
    class chunk_c final : public chunk_stream_c
    {
    ....
    }
    Ubuntu fan depuis la 8.04
    monnaie libre

  4. #4
    Membre régulier

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2003
    Messages : 120
    Points : 82
    Points
    82
    Billets dans le blog
    1
    Par défaut
    Je pense avoir trouvé, une mauvaise utilisation de la clause using dans les headers...
    Ubuntu fan depuis la 8.04
    monnaie libre

  5. #5
    Membre régulier

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2003
    Messages : 120
    Points : 82
    Points
    82
    Billets dans le blog
    1
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    class chunk_c;
     
    using chunk_up = std::unique_ptr<chunk_c>;
    using chunk_upc = std::unique_ptr<const chunk_c>;
     
    class chunk_c final : public chunk_stream_c
    {
    ....
    }
    c'est une mauvaise pratique ce code ???

    EDIT : est-ce que le strict-aliasing est exigé par certaines options de compilation ? quel est le risque d'ajouter l'option -fno-strict-aliasing ???
    Ubuntu fan depuis la 8.04
    monnaie libre

  6. #6
    Membre régulier

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2003
    Messages : 120
    Points : 82
    Points
    82
    Billets dans le blog
    1
    Par défaut
    bon apparemment, pour du LinkTimeOptimization en spécifiant l'option
    -flto
    cela génère le message

    note: code may be misoptimized unless -fno-strict-aliasing is used
    donc je vire -flto, quelqu'un peux me dire si c'est une mauvaise idée ???
    Ubuntu fan depuis la 8.04
    monnaie libre

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

Discussions similaires

  1. Insérer un lien ou une image dans note code
    Par jimmplan dans le forum Visual Studio
    Réponses: 0
    Dernier message: 24/10/2008, 17h51

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