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

Autres éditeurs Discussion :

Pur débutant en C/C++ : Taille des exécutables ?


Sujet :

Autres éditeurs

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 24
    Par défaut Pur débutant en C/C++ : Taille des exécutables ?
    Bonjour,

    Je débute complètement en programmation C/C++ (c'est à dire que je n'y connais encore rien du tout, je me contente d'essayer de faire fonctionner des exemples trouvés ici et la pour essayer d'apprendre ce langage)

    J'ai commencé par créer un programme en console avec Visual Studio 2003, qui m'affiche deux lignes de texte en couleur (exemple pris dans la faq sur développez.com)

    voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    #include "stdafx.h"
    #include <iostream>
    #include <Windows.h>
     
    using namespace std;
     
    int _tmain(int argc, _TCHAR* argv[])
    {
     
     
    	HANDLE hOut;
    	CONSOLE_SCREEN_BUFFER_INFO csbiAncien;
     
    	hOut = GetStdHandle(STD_OUTPUT_HANDLE);
    	if (hOut != INVALID_HANDLE_VALUE)
    	{
    	// on sauvegarde l'état de la console
    	GetConsoleScreenBufferInfo(hOut,&csbiAncien);
     
    	// on met le texte en bleu
    	SetConsoleTextAttribute(hOut,FOREGROUND_RED | FOREGROUND_INTENSITY);
    	cout << "Texte Echoué\n";
     
    	// on met le texte en bleu
    	SetConsoleTextAttribute(hOut,FOREGROUND_GREEN | FOREGROUND_INTENSITY);
    	cout << "Texte Succès\n";
     
    	// on restaure l'état initial
    	SetConsoleTextAttribute(hOut,csbiAncien.wAttributes);
    	}
    }
    Déja j'ai galéré pour faire fonctionner l'exemple, mais donné comme ici il marche chez moi ! (mis à part les accents qui passent pas sur la console, c'est un autre problême)

    Ma question : pourquoi, pour ce programme, l'essence-même du programme basique , et après avoir enlevé tout ce que j'ai trouvé de relatif au débug dans les options du projet, ainsi qu'avoir mis les options d'optimisation soit à 1 (taille) soit à x (optimisation complète), l'exécutable fait 124 ko ?!!??

    Je trouve ça tout de même violent, quand on voit certains utilitaires graphiques faire 43 ko avec des fenêtres, des icônes, et plein de texte... (exemple : tclock) ou pour rester en mode console, apache.exe qui fait 20 ko...

    Si vous avez des astuces pour générer du code plus léger, par exemple une autre méthode de sortie par rapport à cout ?

    merci d'avance

    Edit: Bon, en remplacant les deux cout par printf, et en supprimant la ligne namespace, l'éxécutable fait 60ko... C'est mieux, mais encore très gros pour n'afficher que deux lignes de texte...

  2. #2
    Membre Expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 868
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 868
    Par défaut
    Vu que personne n'a encore répondu, je vais répondre par rapport à ce que j'en sais, ce ne sera pas parfait comme réponse cependant :

    Le problème vient je crois du linker, qui "met en liens" toutes les librairies citées, même si tu ne les utilises pas. Dans ton cas, windows.h et iostream. Je pense que cette taille exagérée est liée aux liens.

    Il y a des moyens d'optimiser la taille d'un executable, par exemple en enlevant les liens inutiles en assembleur, ou bien si tu as la fonction dans ton compilateur c'est aussi bien ( je ne connais pas cette fonction... )

    Voila, ça va faire un "up" sur ce topic, en espérant que quelqu'un de plus calé sur le sujet réponde

  3. #3
    Membre Expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 868
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 868
    Par défaut
    Après une petite recherche, j'ai pu vérifier ce que je dis, en effet, la plupart de la taille d'un petit executable est dûe aux liens vers les librairies;
    Cependant, en fonction de ton compilateur, tu peux générer un fichier nommé "map", avec l'option /map si elle existe sur ton compilateur.

    Tu peux alors y éditer les entrées que tu veux garder, et celles que tu veux enlever, ce qui te permet de produire un exe beaucoup plus petit.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 24
    Par défaut
    merci pour ces éléments de réponse

    Cependant je ne sais pas du tout comment faire ça avec mon compilateur (qui est, je le rappelle, livré avec Microsoft Visual Studio 2003 = VC++ toolkit 2003 il me semble)

    si quelqu'un savait, je lui en serait reconnaissant

Discussions similaires

  1. [XE3] Taille des exécutables
    Par Higgins dans le forum EDI
    Réponses: 13
    Dernier message: 16/07/2013, 13h55
  2. Réponses: 9
    Dernier message: 05/05/2011, 22h56
  3. [Lazarus] Diminuer la taille des exécutables
    Par Clandestino dans le forum Lazarus
    Réponses: 7
    Dernier message: 16/07/2009, 15h29
  4. [WD11] Taille des exécutables
    Par win_devv dans le forum WinDev
    Réponses: 4
    Dernier message: 30/07/2008, 13h14
  5. Réponses: 11
    Dernier message: 06/03/2007, 19h18

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