Dans les premiers jours de la gcc (2.8 etc.) et à l'époque de egcs, et redhat 2.96-O3 été assez buggé parfois. Mais c'est plus d'une décennie, et -O3 n'est pas bien différent de celui des autres niveaux d'optimisations (en buggyness).
Il n'a cependant tendance à révéler des cas où les gens s'appuient sur un comportement indéfini, en raison du recours plus strictement les règles, et en particulier le coin des affaires, de la / les langue(s).
Comme une note personnelle, je suis en cours d'exécution d'un logiciel de production dans le secteur financier depuis de nombreuses années maintenant, avec -O3 et n'ont pas encore rencontré un bug qui n'aurait pas été là si je l'aurais utilisé -O2.
Par demande populaire, voici un ajout:
-O3 et en particulier des indicateurs supplémentaires comme -funroll-loops (non activé par -O3) peut parfois conduire à plus de code machine généré. Dans certaines circonstances (par exemple sur un cpu avec exceptionnellement faible L1 cache d'instructions), cela peut provoquer un ralentissement en raison de tout le code, par exemple, de certains boucle interne maintenant ne figure plus dans L1I. Généralement gcc essaie très dur pour ne pas générer autant de code, mais depuis qu'il a habituellement optimise le cas générique, ce qui peut arriver. Options particulièrement sujettes à ce (comme le déroulement de la boucle) ne sont pas normalement inclus dans -O3 et sont marqués en conséquence dans la page de manuel. En tant que tel, il est généralement une bonne idée d'utiliser -O3 pour la génération de code rapide, et seulement tomber en arrière-O2 ou -Os (qui tente d'optimiser la taille du code) le cas échéant (par exemple, lorsqu'un générateur de profils indique L1I manque).
Si vous voulez prendre de l'optimisation de l'extrême, vous pouvez le tordre dans gcc via --param les coûts associés à certaines optimisations. En outre noter que la gcc a maintenant la possibilité de mettre des attributs à des fonctions de contrôle de l'optimisation des paramètres de ces fonctions, ainsi, lorsque vous trouvez que vous avez un problème avec-O3 dans une fonction (ou que vous voulez essayer des indicateurs justement pour cette fonction), vous n'avez pas besoin de compiler le fichier entier ou même de l'ensemble du projet avec O2.
otoh, que il semble que les soins doivent être prises lors de l'utilisation -Ofast, qui stipule:
-Ofast permet à tous -O3 optimisations.
Il permet également aux optimisations qui ne sont pas valables pour tous les types
programmes compatibles.
ce qui me fait conclure que -O3 est destiné à être pleinement conformes aux normes.