Newsgroup: it.comp.lang.c++
Titolo: Dimensione eseguibile maggiore se scritto in C++ [Cygwin g++]

Ciao a tutti, volevo chiedervi una cosa: stavo iniziando ad usare il
compilatore g++ presente in Cygwin. Allora ho scritto un piccolo programmino
helloworld.cpp:
#include <iostream>
int main() {
    cout << "Hello World" << endl;
    return 0;
}
Ho compilato con il comando "g++ -o helloworld.exe helloworld.cpp" e mi e'
venuto fuori un eseguibile da 180K.
Allora ho scritto l'equivalente programma C che al posto di includere
iostream include stdio.h e al posto del comando cout usa la printf.
L'eseguibile generato dal programma C e' di 19K. Se uso il comando strip,
"l'eseguibile C++" diventa di 70K mentre quello "C" diventa di 3K.
Tutti e due dipendono da una dll di Cygwin che e' grande 700K.
Mi chiedevo se qualcuno sa spiegarmi dove e' la ragione di questa
differenza, a mio parere, enorme delle dimensioni degli eseguibili. Secondo
voi e' il compilatore? Sono i parametri che gli o non gli passo? Oppure e'
una cosa normale quando si compila con il C++?
Grazie
Saluti

una cosa normale quando si compila con il C++?
Purtroppo e' una cosa molto comune con il C++...
Il problema e' che il castello ostream e' decisamente
complesso (e, lasciami aggiungere, pure abbastanza
scomodo da usare).
Andrea

 differenza, a mio parere, enorme delle dimensioni degli eseguibili.
Ti ha gia' risposto Andrea Griffini...
Io mi limito a dirti che la differenza di dimensione che riporti e'
importante solo se il progamma deve girare su un sistema embedded.
Dal tuo messaggio mi sembra che a te interessi scrivere un programma per un
PC (windows con cygwin), quindi, un programma di 180K non mi sembra poi
cosi' grande!
Tra le altre cose la differenza non e' come dici tu tra C e C++, ma tra
cstdio e iostream. A quanto pare hai compilato entrambi in C++ e sono
entrambi quindi programmi C++.
Tommy

 Tommy
Grazie a tutti...
in realta' mi ero dimenticato di dire che quando ho compilato il programma C
l'ho fatto col compilatore C.
In effetti le dimensioni non mi interessano molto, ma il fatto di vedere un
helloworld da 180K che "strippato" diventava comunque di 70K... ci restavo
male...
Grazie ancora a tutti...
Ciao

 male...
Tutta la potenza del C++ costerà ben qualcosa...
ciao.

 70K... ci restavo male...
Cosa vuol dire strippato?
-- 
Kleidemos
C++ Programmer
kleidemo...@altervista.org
http://kleidemos.altervista.org/


E' un termine del pippero... praticamente significa che ho usato il comando
strip per ridurre le dimensioni di un eseguibile. CREDO che vada ad
eliminare delle informazioni di debug, ma non ne sono pienamente certo...
Se lavori su Linux oppure hai cygwin (in windows) e fai un programmino
piccolo, prova a eseguire il comando:
    strip -s <nome eseguibile> -o <nome nuovo eseguibile>
dove <nome eseguibile> e' il nome del tuo attuale eseguibile e <nome nuovo
eseguibile> e' il nome dell'eseguibile che vuoi che venga creato.
Vedrai che il nuovo exe e' + piccolo.
Probabilmente puoi anche ottenere la stessa cosa con dei parametri del
compilatore/linker ma io nin zo.

Hai proprio ragione.
Tnk per la nuova scoperta.
:)


 Cosa vuol dire strippato?
vuole dire fuori di testa ;-)
strip e' un comando disponibile sotto linux ad esempio per ridurre le
dimensioni dell'eseguibile.
in inglese strip, tra le altre cose, significa rimuovere cose estranee o
superficiali. ecco quindi come funziona strip.
strip rimuove alcuni simboli, di debug o altro, che sono superficiali per
l'esecuzione del programma. Non c'e' vantaggio a fare cio' se non per
ridurre la dimensione del file. Se questa non e' importante non andrebbe
fatto.
Poi, per quanto OT, magari persone che ne sanno piu' di me per cio' che
riguarda l'ambiente linux potranno aggiungere qualche breve commento.
Tommy

 differenza, a mio parere, enorme delle dimensioni degli eseguibili.
g++ fa schifo sotto questo punto di vista. E' l'unico compilatore C++ a 
combinare porcherie simili
-- 
  < 
http://www.reactos.com/
 >  Open source clone of Windows NT. Current
      Don't stand, REACT!      version 0.1.5. C, C++ and ASM developers
                               and beta testers are welcome!

 Tutta la potenza del C++ costerà ben qualcosa...
no, fesserie. Il problema si verifica unicamente con g++. Non ho ancora 
capito se l'overhead è costante o lineare, ma tende a diventare *molto* 
fastidioso, e a scoraggiare quasi sempre l'uso del C++. Se non fossi la 
persona timida e immacolata che sono, quasi penserei che è intenzionale


 persona timida e immacolata che sono, quasi penserei che è intenzionale
Maro', quanto sei sempre veemente nelle tue risposte :P
Cmq non so - hai dati di altri compilatori? Onestamente, uso solo il g++ 
da un casino, e non mi va di ritirare fuori visual studio solo per una 
prova...
-- 
/**
  * Mattia Belletti - Undergraduate student @ 
cs.unibo.it
  * ICQ: 33292311   - email: 
mbel...@cs.unibo.it
  * IRC: BluShine   - site(s): 
http://cs.unibo.it/~mbellett
  * Linux registered user 299762 @ Linux registered machine 213003
  */

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Bubuti Bauontico wrote:
| g++ fa schifo sotto questo punto di vista. E' l'unico compilatore C++ a
| combinare porcherie simili
Ah, includere le librerie C++ è una porcheria, per un compilatore C++?
^_^"""
Comunque l'overhead è fisso, ovviamente, quindi dà fastidio solo per
programmi particolarmente piccoli...
certo, poi se uno usa le STL e si sbizzarrisce un po' diventa facile
scrivere 1Kb di codice e ottenerne 3Mb di exe 0=)
- --
L a p o   L u c h i n i
l a p o @ l a p o . i t
w w w . l a p o . i t /
http://www.megatokyo.it
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.2 (Cygwin)
Comment: Using GnuPG with Mozilla - 
http://enigmail.mozdev.org
iEYEARECAAYFAkAFCqYACgkQaJiCLMjyUvvxYwCgv28FjFvheST8fMuVw4JQHzHt
8VQAoKDyHDwJYYDv7G3+LLBAVbfqAADJ
=XmZj
-----END PGP SIGNATURE-----

> no, fesserie. Il problema si verifica unicamente con g++. Non ho ancora
NO, STRONZATE!
Per dirla col tuo stile.
Hello C++ contro Hello C con il Borland C++ vince il C con 50K contro circa
250K.
Attendo smentite.

 riguarda l'ambiente linux potranno aggiungere qualche breve commento.
Tipo che non va fatto sulle librerie dinamiche (.so) :-)