Bonsoir !
suite à une compilation, j'ai ce messagequelle est l'utilité de l'option "no-strict-aliasing" ?note: code may be misoptimized unless -fno-strict-aliasing is used
merci !
Bonsoir !
suite à une compilation, j'ai ce messagequelle est l'utilité de l'option "no-strict-aliasing" ?note: code may be misoptimized unless -fno-strict-aliasing is used
merci !
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.
merci dalfab
un peu plus en détail :
EDIT : ça reste assez flou pour ma part...
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>; ^
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 { .... }
Je pense avoir trouvé, une mauvaise utilisation de la clause using dans les headers...
c'est une mauvaise pratique ce code ???
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 { .... }
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 ???
bon apparemment, pour du LinkTimeOptimization en spécifiant l'optioncela génère le message-flto
donc je vire -flto, quelqu'un peux me dire si c'est une mauvaise idée ???note: code may be misoptimized unless -fno-strict-aliasing is used
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager