PDA

View Full Version : [C++] Dimensioni .exe


Jonny32
06-04-2005, 14:44
Utilizzo come compilatore Dev-Cpp e quando compilo i programmi in c++ mi vengono degli eseguibili di circa 550 kb (anche se magari il programma non fà niente).

E' possibile con qualche ottimizzazione creare degli eseguibili più piccoli?


P.S.: Ho visto che sotto Linux i file compilati in c++ vengono grossi sui 20 kb, come mai questa differenza?

Grazie

ilsensine
06-04-2005, 14:48
1) usa librerie dinamiche
2) in fase di link, "strippa" il codice (parametro -s del linker). Così tirerai via anche le informazioni di debug, quindi fallo solo se compili in release.

tglman
06-04-2005, 14:58
La cosa più importante per rendere l'eseguibile più leggero e di togliere tutte le informazioni di debug e tutte le librerie che non vengono usate, io con LCCwin32 sono riuscito ad aver programmi che non facevano niente, ma pesavano solo 7 k.
e l'ultimo programma che sto facendo che ha circa 1500 riche di codice in c pesa solo 35.5k.....
Ciao.

Jonny32
06-04-2005, 15:03
Originariamente inviato da ilsensine
2) in fase di link, "strippa" il codice (parametro -s del linker). Così tirerai via anche le informazioni di debug, quindi fallo solo se compili in release.

fatto. Le dimensioni del file dimezzano. :sofico:

1) usa librerie dinamiche

Cioè?

tglman
06-04-2005, 15:23
le librerie dinamiche sono librerie esterne al programma, per esempio le dll di windows, se tu usi delle funzioni che sono in una libreria dinamica non la includi nel codice del tuo programma ma includi solo il codice per chiamarla, invece con una libreria statica il codice viene inserito totalmente nel tuo programma...

Comunque guarda le impostazioni che hai a riguardo del linker e vedi quali librerie vengono gia incluse nel tuo programma e elimina tutte quelle che non servono, consiglio personale se non sai se qualche libreria ti può essere utile, non ti preoccupare toglile tutte al massimo il linker ti dara errore e tu riprovi ad inserirle una per volta.
Ciao
brutto metodo ma Ciao.

ilsensine
06-04-2005, 15:45
Originariamente inviato da Jonny32
Cioè?
Il compilatore potrebbe linkare le librerie di runtime c/c++ in maniera statica. Questo ti consente di distribuire il programma a terzi senza la necessità di distribuire anche le librerie di runtime (la cui dimensione è normalmente superiore al mezzo mega, in quanto contengono anche tutti gli oggetti che il tuo programma non usa).
Se hai disponibili le librerie di runtime dinamiche (dll), devi semplicemente controllare che il linker non stia usando quelle statiche (ovvero non abbia il flag -static, non indichi il path degli archivi statici nel comando di linking, e che le dll dinamiche siano presenti nel tuo ambiente di sviluppo).