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 :

Poids de #include <iostream>


Sujet :

C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de coyotte507
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    1 327
    D�tails du profil
    Informations personnelles :
    �ge : 35
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 327
    Par d�faut Poids de #include <iostream>
    Bonjour,

    j'ai d�couvert quelque chose d'assez surprenant qui alourdit mes applications.

    Quand je rajoute un #include<iostream>, je passe de 25 ko � 263 ko!
    J'ai fait ce test � la suite de la d�couverte du code d'un jeu vid�o adapt� par le cr�ateur m�me de SDL, et qui �tait en C++, avec tous les aspects POO, mais sans rien inclure de la STL ni de la SL. (Maelstr�m)

    Je me demande donc s'il est courant de ne pas inclure ces ent�tes pour �conomiser de l'espace?

  2. #2
    Expert confirm�
    Avatar de Luc Hermitte
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2003
    Messages
    5 296
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : A�ronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Ao�t 2003
    Messages : 5 296
    Par d�faut
    Quand je n'ai besoin ni de std::cout, ni de std::cin, ni de std::cerr, ni de std::clog, je n'inclus pas <iostream>.
    Sinon, dis-toi que 200ko, ce n'est rien compar� compar� � une dizaine de m�ga.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne r�ponds � aucune question technique par le biais de ce m�dia. Et de toutes fa�ons, ma BAL sur dvpz est pleine...

  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 faut bien comprendre le fait que l'en-t�te iostream regroupe en d�finitive tout ce qui est n�cessaire pour... pouvoir afficher quelque chose sur la sortie standard, en ce, y compris l'ensemble de ce qui est n�cessaire... pour pouvoir afficher cette sortie standard :p

    Si tu as un peu de temps � perdre, amuse toi simplement � regarder tout ce qui est inclus gr�ce au jeu des inclusions en cascade par le simple fait d'inclure le fichier <iostream>... C'est purement et simplment surprenant: Chez moi (avec Gcc), on voit que iostream inclus
    • istream qui inclus
      • ios qui inclus
        • iosfwd
        • exception
        • bits/char_traits.h
        • cstdio
        • bits/localefwd.h
        • bits/ios_base.h
        • streambuf
        • bits/basic_ios.h
      • limits
    • ostream
    • bits/c++config.h
    (je me suis arr�t� l� )
    et qu'une bonne partie de ces fichiers sont, finalement, susceptibles de d�finir des classes, des traits ou des m�thodes qui, en d�finitives, interviendront dans le simple fait d'�crire un cin>>lavar ou un cout<<lachaine

    Il n'est donc pas surprenant outre mesure que la simple inclusion de iostream provoque une prise de poids de l'ordre de 200 kb

    Mais, comme l'a fait remarquer Luc Hermite, si les 200kb pris peuvent para�tre �norme en compar� aux 23k de d�part, ils ne feront qu'une diff�rence minime compar� � l'application finie qui risque de faire plusieurs Mb

    De la m�me mani�re, il y a de fortes chances que, si le fichier d'en-t�te n'est pas inclus, c'est, tout simplement parce que l'auteur n'a besoin d'aucune classe/fonction/m�thode qu'il fournit, et non pour �conomiser quelques k � l'application
    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 �m�rite
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    780
    D�tails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations forums :
    Inscription : Mai 2006
    Messages : 780
    Par d�faut
    et si tu enl�ves les informations de debug?

    je passe de 100ko � 8ko

    ( si la place est vraiment un probl�me... )

  5. #5
    Membre Expert
    Avatar de coyotte507
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    1 327
    D�tails du profil
    Informations personnelles :
    �ge : 35
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 327
    Par d�faut
    comment faire?

  6. #6
    Membre �m�rite
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    780
    D�tails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations forums :
    Inscription : Mai 2006
    Messages : 780
    Par d�faut
    tu compiles avec quoi?

  7. #7
    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
    Concr�tement:
    1. N'inclus que les fichiers qui te sont r�ellement n�cessaires: la SDL permet un affichage directement dans sa fenetre me semble-t-il, pourquoi ne pas en profiter
    2. compile en mode debug quand tu d�veloppe ton application, en mode release quand tu t'apprete � fournir une version utile
    3. ne t'inqui�te pas trop de la place que ca prend: tu auras surement d'autres soucis plus importants

    Tes premiers soucis, en tant que programmeur, c'est, et ca doit rester:
    1. que ton application fonctionne
    2. que ton application fasse ce que tu attend d'elle
    3. que les algorithmes mis en oeuvre soient les meileurs possibles (ou � d�faut, les moins mauvais possible)

    Ce n'est qu'une fois que ces trois points sont pleinements aquis que tu peux commencer � t'inqui�ter du reste: la vitesse d'ex�cution et/ou la taille de ton ex�cutable, et encore, si le besoin s'en fait r�ellement sentir uniquement.

    Une possibilit� pour am�liorer l'un ou l'autre peut, tout simplement, de modifier les options de compilation (le param�tre -O sous Gcc, par exemple) ou d'envisager une "autre mani�re de coder" (pr� incr�mentation au lieu de post incr�mentation...)
    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

  8. #8
    Membre Expert
    Avatar de coyotte507
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    1 327
    D�tails du profil
    Informations personnelles :
    �ge : 35
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 327
    Par d�faut
    Pourquoi ne pas profiter de la fen�tre SDL?
    J'en profite, mais je me vois mal adapter �a � l'affichage sur la fen�tre:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    // initialize SDL video
        if ( SDL_Init( SDL_INIT_VIDEO ) < 0 )
        {
            printf( "Unable to init SDL: %s\n", SDL_GetError() );
            return 1;
        }
    C'est pour �a que j'ai besoin d'une sortie.

    Sinon, l'option -Os (optimize for size) ne change rien (pour l'instant)

    Est-ce que tout programmeur C++ utilise la SL/STL, ou alors certains utilisent la cstdlib, par exemple?
    Est-ce que c'est courant d'utiliser les ent�tes h�rit�es du C?

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. R�ponses: 9
    Dernier message: 20/06/2008, 17h20
  2. [Debutant] VC++ 2005 pb d'include <iomanip><iostream>
    Par burning_burno dans le forum D�buter
    R�ponses: 5
    Dernier message: 21/09/2007, 15h26
  3. Probl�me avec l'include des iostreams
    Par fredonouille dans le forum SL & STL
    R�ponses: 3
    Dernier message: 04/07/2007, 20h36
  4. [FTP] Include dans un switch, gain de poids ?
    Par nicovoa dans le forum Langage
    R�ponses: 3
    Dernier message: 02/11/2006, 09h05
  5. Debutant visual c++! #include "iostream.h"
    Par mazenbe dans le forum MFC
    R�ponses: 8
    Dernier message: 11/11/2005, 12h40

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