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++

  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
    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.

  5. #5
    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...

  6. #6
    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

  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 ... 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

  8. #8
    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
    Dans devC++, tu peux aller dans les options du projet. Paramètres. Pis dans Compilateur C++, ajoutes : -Os

  9. #9
    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
    Ouais pour minimiser la taille si j'ai bien compris mais pour que la fenêtre n'apparaisse pas lors de l'execution du .exe ?

  10. #10
    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
    Tu développes quel type d'application ? Qui utilise SDL ? Les bibliothèque Windows, QT ? Ou simplement console ?

  11. #11
    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
    Un tout tout petit programme qui va me permettre de me simplifier la vie avec LaTeX de type Win32 Console. Le truc c'est que j'ai pas besion qu'il m'affiche la fenêtre d'invite de commande, j'ai juste besion qu'il compile pour qu'il génère un .tex avec une équation dedans. Il y a pas moyen qu'il ne m'affiche pas cette fenêtre ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #include<iostream>
    #include<fstream>
    #include<string>
    #include<math.h>
     
    using namespace std ;
     
     
    int main()
    {
        // code qui me permet de générer mon fichier
    }

  12. #12
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Fais un projet de type "Win32 Application" (attention au point d'entrée qui devient WinMain).

  13. #13
    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
    j'ai seulement :

    - Win32 GUI
    - Win32 Console
    - Win32 Static Lib
    - Win32 DLL

    comme solution, pour les types de projet.

  14. #14
    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
    Pour reprendre ce que je disais au début, chercher comment passer en mode runtime est le plus simple.
    Pour expliquer cela, sache que les programmes C et C++ peuvent être compilés en deux modes: debug et runtime.
    Le mode debug est indispensable pour faire du debuggage (il n'existe pas dans d'autres langages comme Java et C# tout simplement parcequ'ils permettent le débuggage dans tous les cas). Hors, ce mode génère beaucoup d'informations inutiles dans l'exécutable, passer en mode runtime permet généralement de gagner 300-400 ko facile. Comme ton projet est probablement en mode debug (c'est comme ça par défaut dans tous les editeurs que je connais), ce serait la voie la plus directe pour le problème qui te préoccupe.
    Bon, maintenant à toi de retrouver la partie du menu qui permet de choisir cela, je vais pas réinstaller dev-c++ rien que pour voir où ça se trouve et te le dire.
    Et pour ton problème de console, c'est le type GUI qu'il faut choisir.

    Edit: pour exemple, je compile un "hello world" avec mingw et j'obtiens un exe de 586ko, en mode runtime ça devient 270.

  15. #15
    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
    Pourtant, j'ai bien Windows Application dans DevC++.


    Enfin, passons.

    Tu devrais un minimum chercher avant de poster ta question. Par exemple en essayant les choix que tu nous demandes. Sachant que : DLL et Static lib sont des bibliothèques, et sachant que Console, c'est ce que tu avais avant. Tu devrais trouver.

  16. #16
    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
    zais_ethael : le problème c'est que c'est la 10ème fois que je passe en revu toutes les options du projet et qu'il n'y a rien qui est nommée runtime ou debug donc ...

    millie : je ne sais pas où tu vois Windows Application dans les options des projets, en tout cas pour ma part elle n'y est pas et pourtant la 4.9.9.2 qui est la dernière version il me semble. J'ai réessayé de compiler avec les autres types et il semblerait que Win32 GUI fonctionne cette fois-ci. Il me semble pourtant avoir vu une fenêtre s'afficher la dernière fois.

    Enfin bref, mon problème est résolu en grande partie (je verrais une autre fois pour ce runtime introuvable), je vous remercie encore une dernière fois pour vos réponses.

    Bonne soirée

  17. #17
    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
    Bizarre, voici chez moi :


  18. #18
    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
    Effectivement il y est lorsque tu crée un projet mais pas après dans le volet 'général' > 'type' dans les options du projet (ALT+P) !

  19. #19
    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
    Autant pour moi. Je croyais que tu parlais lors de la création du projet. Oui, c'est bien GUI qu'il faut mettre.

  20. #20
    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
    Pour ceux qui passerai par là en ce posant la même question que moi, il semblerait que DEV C++ n'inclue pas la partie pour le debuggage par défaut donc voilà mon dernier problème résolu.

    Si l'on souhait par contre faire l'inverse (avoir la partie pour le debuggage), il faut ajouter l'attribut '-g' dans les paramètre du compilateur C++ (dans le cas de g++ qui est le compilateur par défaut sur DEV C++), pour ensuite debugger avec GBD.

    Voilà tout ... bonne soirée.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

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