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

C++ Discussion :

amélioration de la compilation


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2005
    Messages : 168
    Par défaut amélioration de la compilation
    Bonjour à tous,

    Je code sur dev c++ et j'aurais une petite question : j'ai fait un tout petit programme qui fonctionne très bien le seul "problème" se trouve au niveau de la taille du .exe ... 489ko contre 2ko pour la source.

    Comment faire pour améliorer cela (diminuer la taille du .exe) et arrêter d'afficher la fenêtre d'invite de commande par la même occasion lors de l'exécution car j'en ai aucune utilité ? Est-ce que quelqu'un aurait de la doc ?

    merci d'avance.

    ps.: j'ai regarder dans les options du compilateur et ça n'a pas changer grand chose (466 ko) en mettant 'yes' à 'meilleures optimisation'.

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 064
    Par défaut
    Je suppose que tu utilises Visual C++.
    "Meilleure optimisation" n'a rien à voir avec la taille de l'exe (au contraire, ça pourrait même l'agrandir, ce qui ne signifie pas que tu dois l'enlever ). Le meilleur moyen est de passer en mode runtime et non pas debug, il y a une petite list box en haut à gauche pour ça.
    Pour la fenetre il faut aller dans la fenètre de paramètrage de ton projet, il y a une option pour ça mais je ne sais plus où.

    Edit: oups, j'avais pas vu pour Dev C++, mais les conseils valent aussi

  3. #3
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,

    Il est tout à fait logique que l'exécutable fasse quelques centaines de ko (ce qui n'est, sommes toutes, rien du tout) alors que le code source tient sur un ou deux ko...

    En effet, la seule directive d'inclusion d'un fichier d'entete (qui ne prend que quelque caractères) aura pour effet... de provoquer l'insertion dans l'exécutable de l'ensemble des fonctions que peut déclarer le fichier d'entete (y compris des fonctions inutilisées du fichier d'entete)

    Et comme il est fréquent qu'un fichier d'entete se base sur d'autres fichiers d'entete pour etre en mesure de fournir les fonctions qui lui sont propres... la simple inclusion de iostream, pour le tout classique "hello world", produira en définitive un exécutable de ... 505 ko (sous code::blocks/mingw, sans symboles de debuggage) (pour un code source de...97 octets à peine )

    Rien que pour te donner une idée, iostream, qui te permet juste de gerer les flux d'entrée/sortie inclut:
    • istream
    • ostream
    • c++config.h


    istream (et sans doute aussi ostream) inclut
    • ios
    • limits


    ios, quant à lui, inclut
    • iosfwd
    • exceptions
    • char_traits.h
    • cstdio
    • localefwd.h
    • iosbase
    • streambuf
    • basic_ios.h

    et je suis sur que l'on pourrait continuer comme cela, avec, au minimum tous les fichiers qui n'ont pas l'exension .h, et avec une bonne partie de ceux qui l'ont...

    L'astuce, c'est que tous ces fichiers vont déclarer quelques fonctions (et provoquer l'insertion de ces fonction dans l'exécutable réusltant), qui seront nécessaire à la gestion des flux d'entrée/sortie, que tu n'auras peut être meme pas l'impression d'utiliser ces fonctions, parce que tu appelle une fonction qui en appelle deux autres, qui elles meme en rappelleront... et feront en sorte que tu ne puisse pas envisager de te passer de l'un d'eux...

    Ceci dit, une fois que ton code est correct, tu peux te rendre dans les options de compilations et demander à effectuer une compilation finale sans les informations de débuggage (615 ko pour le hello world avec informations de debuggage contre 505 sans )
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  4. #4
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    Ben déjà la bibliothèque standard C++ est liée statiquement, donc rien que ça, ça prend de la place...

  5. #5
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Par défaut
    Comme ça n'a pas été dit, pour optimiser la taille des fichiers exécutables avec gcc, c'est l'option : -Os (-O3 étant pour une optimisation vitesse (mais éventuellement plus grosse taille).

    Sur les systèmes actuelles (genre pas un micro-contrôleur où la taille mémoire peut être vite limitée), c'est plutôt -O3 qu'on utilise

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2005
    Messages : 168
    Par défaut
    merci ... pour la taille c'est ok mais pour la fenêtre je trouve rien dans les volets du panneau d'options du projet. Est-ce que quelqu'un pourrait me dire dans quel volet est l'option et me donner son nom si elle n'est pas explicite ?

    merci d'avance

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2005
    Messages : 168
    Par défaut
    Merci à vous deux. J'ai cherché dans les différents volets des options du projet mais rien ne semble correspondre à runtime. Quel est le terme utilisé par dev c++ ? et où se trouve l'option qui permet de ne pas afficher la fenêtre d'invite de commande suite à l'exécution ?

    merci d'avance.

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

Discussions similaires

  1. [GWT2.6.1] Amélioration du code compilé
    Par valkeke dans le forum GWT et Vaadin
    Réponses: 2
    Dernier message: 24/10/2014, 16h45
  2. [à améliorer] Compiler boost 1_55_0 avec MinGW32
    Par Archloy dans le forum Boost
    Réponses: 0
    Dernier message: 26/07/2014, 16h35
  3. [WD17] Améliorer les performances d'un batch de compilation
    Par Trs80M1 dans le forum WinDev
    Réponses: 0
    Dernier message: 18/02/2013, 11h08
  4. Comment améliorer le temps de compilation pour C/C++ ?
    Par Hinault Romaric dans le forum C
    Réponses: 18
    Dernier message: 11/01/2013, 21h02
  5. Améliorer les performances de la compilation C++
    Par gbdivers dans le forum C++
    Réponses: 45
    Dernier message: 21/01/2011, 18h25

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