• # Le meilleur ?

    Posté par  . Évalué à 5.


    meilleur compilateur pour windows: mingw


    C'est étrange, quand je pense à un compilateur pour Windows, c'est plutôt ceux de Microsoft, Borland ou Intel qui me viennent à l'esprit. Comment MinGW, issu d'un compilateur pour une autre plate-forme, peut-il être le meilleur?

    C'est le plus polyvalent, mais pas nécessairement le meilleur pour compiler du code C++ optimisé pour Windows. Aussi, il a l'avantage d'être libre, bien que je doute qu'il y est beaucoup d'utilisateurs qui vont modifier le code source.

    S.V.P., soyez gentil, je suis un pauvre utilisateur de Windows.
    • [^] # Re: Le meilleur ?

      Posté par  . Évalué à 10.

      Et bien à ma grande surprise, g++-4.2 génère un code largement plus rapide que Visual C++ 8.0 !!! J'ai récemment eu l'occasion de porter du code Linux sous Windows ... et j'ai commencé par MinGW (car plus facile) mais je l'ai aussi porté sous Visual C++ 8.0, justement parce que je me disais que ce serait plus rapide comme ça. Et bien non ! Avec g++-4.2 j'ai un gain de performances de l'ordre de 15% par rapport à Visual C++ 8.0. Bien sûr, le test a été fait après fignolage des options de compil des deux côtés. Le plus étonnant est que mon code tourne toujours 5% plus vite sous Linux que sous windows, même avec le même compilo O_o

      Comme quoi l'équipe de GCC a fait des prouesses avec la version 4.2 !!! Reste plus qu'à optimiser le compilo lui-même (l'objectif de la version 5 si je me souviens bien).
    • [^] # Re: Le meilleur ?

      Posté par  . Évalué à 3.

      Puis les trucs qu'un compilo est capable d'optimiser ça me semble plutôt être du code machine, donc dépendant de l'architecture et non du système d'exploitation d'où le fait de comparer des compilos qui produise du code « portable » (plus qu'à avoir les syscalls qui vont bien derrière ;-).
      C'est vrai que gcc 4.2 est super sympa, mais bon mon crossdev me permettait déjà de générer du mingw32 (en cross compilant bien sûr) avec ce compilo.
      • [^] # Re: Le meilleur ?

        Posté par  . Évalué à 3.

        Je l'avoue, je n'y connais rien. Je compile avec les réglages par défaut quel que soit le compilateur. Par contre, j'ai mentionné le compilateur de Intel qui lui a un avantage sur ses processeurs.

        Quelles sont les différences au niveau des librairies? C'est plutôt là que je voyais un avantage pour les librairies écrites par Microsoft qui connaît sûrement mieux les détails de l'API Win32. Je suppose que chaque compilateur a sa propre librairie STL par exemple.

        Aussi, est-ce complexe de porter une application qui utilisent des librairies dites standards vers MinGW?
        • [^] # Re: Le meilleur ?

          Posté par  . Évalué à 10.

          Le compilo n'a d'habitude pas grand-chose a voir avec l'OS sur lequel il tourne(il y a 2-3 trucs genre le format de l'executable, ...), c'est le processeur sous-jacent qui compte principalement.

          Pour ce qui est de l'API, il vient du platform SDK, qui n'est pas specifique a VC++ et est utilisable par d'autres compilos, bref c'est meme topo pour tous les compilos.

          Pour ce qui est de STL, effectivement chaque compilo a tendance a avoir sa version, mais STL ca n'a de nouveau rien a voir avec l'OS, il s'agit simplement de structures de donnees en memoire, quel que soit l'OS c'est quasiment la meme chose(a 2-3 details pres niveau optimisations).
          • [^] # Re: Le meilleur ?

            Posté par  . Évalué à 6.

            Si j'ai bon souvenir, la gestion des exceptions des compilateurs c++ est dépendante du système d'exploitation. Histoire de pouvoir catcher certains signaux par exemple. ce qui peut impacter les performances.
            De même, l'allocation mémoire via l'opérateur "new", ce qui n'est pas rien, est dépendante du système d'exploitation.
            Ces deux éléments là, à eux tous seuls, peuvent changer pas mal de choses d'un OS à un autre...
            • [^] # Re: Le meilleur ?

              Posté par  . Évalué à 5.

              > Si j'ai bon souvenir, la gestion des exceptions des compilateurs c++ est dépendante du système d'exploitation.

              Non. Tout ce qui est nécessaire, c'est de dépiler la pile des appels de fonction. Il n'y a pas d'appel système.

              > Histoire de pouvoir catcher certains signaux par exemple.

              Toujours pas. C'est une fonction qui va "catcher" les signaux, puis c'est (ou non) renvoyé à une exception C++. Ce renvoi est fait en C++ et n'utilise aucun appel système.

              NB : les exceptions en C++ ne sont pas des "signaux" unix. C'est un mécanisme équivalent à longjump du C (j'ai oublié le nom exacte de la fonction). C'est équivalent mais en beaucoup beaucoup plus "luxueux" et sûr.

              > De même, l'allocation mémoire via l'opérateur "new", ce qui n'est pas rien, est dépendante du système d'exploitation.

              Oui car toute allocation mémoire dépend de l'OS (sauf système très particulier).
              Mais il est possible d'allouer un gros bloque de mémoire (via un appel système) puis d'utiliser new sans jamais faire d'appel système.
    • [^] # Re: Le meilleur ?

      Posté par  . Évalué à 10.

      l'avantage d'un compilo libre est qu'avec tu peut tout faire, avec le visual c++ de microsoft il t'es interdit de faire certaine choses, dont un compilateur par exemple.

      donc bon, c'est pour cela que gcc est vraiment la brique de base de la liberté meme si tu ne modifie pas les sources
  • # ...

    Posté par  . Évalué à 10.

    On oubliera pas que cette version de mingw est également disponible sous les OS du bien, permettant de créer des builds Win32 quand comme moi, on a strictement aucune installation Windows à la maison.

    Bravo aux programmeurs !

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.