Vos trucs pour réduire la taille de votre executable

Vos trucs pour réduire la taille de votre executable - C++ - Programmation

Marsh Posté le 28-08-2003 à 11:13:49    

Cas particulier : je viens de compiler mon projet, l'exe prend 6 megas... alors que le programme ne fait pas grand chose... J'utilise gcc avec mingw. (La moitié de la taille de l'exe est apparament occupée par des symboles exportés... )Comment me débarrasser de ce qui prend de la place?
 
Cas général : Dans un plus large contexte, qu'est-ce qui bouffe la place dans un exe, comment garder mon exe de taille "raisonnable"?

Reply

Marsh Posté le 28-08-2003 à 11:13:49   

Reply

Marsh Posté le 28-08-2003 à 11:15:54    

6Mo :o
T'as pas compilé en debug au moins ?

Reply

Marsh Posté le 28-08-2003 à 11:19:51    

1. compile en mode Release
2. Utilise strip.
3. cherche goolgle pour UPX (Ultimate PAcker For Executabel)
c une appli en ligne de commande qui nettoie bien les exe et les compresse.
On gagane facilement 50% de taille pr 0% de perte de temps d'execution.

Reply

Marsh Posté le 28-08-2003 à 11:24:59    

Sinon tu peux aussi écrire tes programmes en assembleur, tu gagneras environ 60% en taille d'éxécutable !
Et je te parle pas de la rapidité :o

Reply

Marsh Posté le 28-08-2003 à 11:25:52    

Réduire les fonctionnalités.  :o

Reply

Marsh Posté le 28-08-2003 à 11:42:13    

Joel F a écrit :

1. compile en mode Release
2. Utilise strip.
3. cherche goolgle pour UPX (Ultimate PAcker For Executabel)
c une appli en ligne de commande qui nettoie bien les exe et les compresse.
On gagane facilement 50% de taille pr 0% de perte de temps d'execution.


 
Je confirme je suis passé de d'un exe de 400 ko à moin de 80ko en utilisant ces deux utilitaires


---------------
Le Tyran
Reply

Marsh Posté le 28-08-2003 à 11:43:26    

flag...ca pourrait me servir! :jap:

Reply

Marsh Posté le 28-08-2003 à 11:43:39    

Il me semble qu'il y a une option -fstrength-reduce ou quelque chose comme ça dans gcc, non ?


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 28-08-2003 à 11:46:10    

gcc -s déjà
 
après tu peux compiler en -Os en plus (optimisation, mais pas celle qui grossisse la taille du code)

Reply

Marsh Posté le 28-08-2003 à 11:51:43    

Harkonnen a écrit :

Il me semble qu'il y a une option -fstrength-reduce ou quelque chose comme ça dans gcc, non ?

rien à voir

Reply

Marsh Posté le 28-08-2003 à 11:51:43   

Reply

Marsh Posté le 28-08-2003 à 11:53:04    

-fstrength-reduce c pour forcer un algo de reduction de boucle.

Reply

Marsh Posté le 28-08-2003 à 12:07:35    

ah oui, je sais, c'est une option à la con au préprocesseur, j'avais envoyé un rapport de bugs y longtemps, parce que toute l'API windows est envoyé au cc (y en a pour un 1Mo à chaque fois)
je cherche

Reply

Marsh Posté le 28-08-2003 à 12:11:34    

-D__GTHREAD_HIDE_WIN32API

Reply

Marsh Posté le 28-08-2003 à 12:13:08    

amusez vous à faire
 
gcc -E hello.c | wc
 
et gcc -E -D__GTHREAD_HIDE_WIN32API | wc
 
 
et mesurez aussi le temps de compilation


Message édité par Taz le 28-08-2003 à 16:20:40
Reply

Marsh Posté le 28-08-2003 à 13:54:36    

- build release (forcément)
- ne pas linker avec le runtime
- flag d'optimisation pour la taille
- /MERGE
 
Il y en a d'autres, mais bon j'ai jamais eu besoin d'optimiser pour la taille, en général c'est la vitesse. Pas mal d'info peut se trouver par là (en anglais) : http://www.hailstorm.net/papers/smallwin32.htm

Reply

Marsh Posté le 28-08-2003 à 14:04:56    

Ashe2 a écrit :

- build release (forcément)
- ne pas linker avec le runtime
- flag d'optimisation pour la taille
- /MERGE
 
Il y en a d'autres, mais bon j'ai jamais eu besoin d'optimiser pour la taille, en général c'est la vitesse. Pas mal d'info peut se trouver par là (en anglais) : http://www.hailstorm.net/papers/smallwin32.htm
 

ça t'arrive de lire un topic?

Reply

Marsh Posté le 28-08-2003 à 15:00:37    

Waip, et il est mis "vos trucs pour reduire la taille de vos exécutables"
J'ai gagné quoi?
(sinon c'était quoi le but de ta question?)

Reply

Marsh Posté le 28-08-2003 à 15:11:36    

Joel F a écrit :

0% de perte de temps d'execution.


 
t'as pas dû tester sur beaucoup de PC :o
selon la machine et l'antivirus installé le programme peut mettre un temps fou à démarrer (par ex sur un PIII 650 avec McAfee j'avais eu le record de 2 minutes pour un soft qui démarrait en 5 secondes non compressé)
 
UPX c'est utile que si l'exe doit vraiment être très petit.
Dans la plupart des cas on zippe l'exe et c'est bon, que ça prenne 6 Mo ou 4 Mo dans le disque dur on s'en fout un peu...
 
Puis un soft compressé par UPX (ou autre) prendra plus de mémoire à l'exécution


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 28-08-2003 à 16:10:40    

Citation :

Et je te parle pas de la rapidité :o


De développement ? :p
 

Citation :

Il y en a d'autres, mais bon j'ai jamais eu besoin d'optimiser pour la taille, en général c'est la vitesse. Pas mal d'info peut se trouver par là (en anglais) : http://www.hailstorm.net/papers/smallwin32.htm


 
Le lien marche pas chez moi.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 28-08-2003 à 16:30:22    

HelloWorld a écrit :

Citation :

Et je te parle pas de la rapidité :o


De développement ? :p
 

Citation :

Il y en a d'autres, mais bon j'ai jamais eu besoin d'optimiser pour la taille, en général c'est la vitesse. Pas mal d'info peut se trouver par là (en anglais) : http://www.hailstorm.net/papers/smallwin32.htm


 
Le lien marche pas chez moi.


 
Il fonctionnait quand j'ai tapé le post, essaie un peu plus tard peut-etre?

Reply

Marsh Posté le 28-08-2003 à 16:40:03    

antp a écrit :


t'as pas dû tester sur beaucoup de PC :o
selon la machine et l'antivirus installé le programme peut mettre un temps fou à démarrer (par ex sur un PIII 650 avec McAfee j'avais eu le record de 2 minutes pour un soft qui démarrait en 5 secondes non compressé)


 
 :??:  Je distribue tte mes applis commeca , j'ai jamais eu de retour negatif pour lenteur a l'execution ...

Reply

Marsh Posté le 28-08-2003 à 17:16:33    

T'as eu de la chance... ou des utilisateurs patients.
Franchement je vois pas l'intérêt de compresser les exe...


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 28-08-2003 à 17:21:11    

Y'a que dans le cas d'un shareware si on veut protégé un petit peu sa routine de serial que je trouve ça acceptable. Je suis aussi partisan de l'exe dans le zip.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 28-08-2003 à 17:24:18    

antp a écrit :

Franchement je vois pas l'intérêt de compresser les exe...

Ça peut permettre d'embêter certains crackers puisque ça peut faire office de barrière de protection supplémentaire.. mais à part ça, bah euhh..
 
Edit : grilled [:grilled]


Message édité par *syl* le 28-08-2003 à 17:24:55
Reply

Marsh Posté le 28-08-2003 à 17:32:24    

Ouais enfin UPX ça se décompresse de la même manière que ça se compresse hein :D


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 28-08-2003 à 17:38:00    

il faut aussi savoir que les exe compressés consomment plus de mémoire car le système de swap de windows ne peut pas fonctionner (l'exe doit etre décompressé entièrement en mémoire) sur des petits softs ce n'est pas trop génants mais pour peux que le programme soit un peu gros et que l'on lance plusieurs instances ...

Reply

Marsh Posté le 29-08-2003 à 11:27:29    

C'est pas seulement un problème de swap, c'est surtout un problème de partage mémoire.
Un exe compressé a les caractéristiques suivantes :
- le code exe est dupliqué pour chaque nouvelle instance au lieu d'être partagé (je viens d'ailleurs de tenter de lancer UPX sur un exe avec section partagée en écriture il a refusé).
- le code exe correspond à un bloc de mémoire alloué par UPX. Il est marqué comme "non swappable" (normal). Mais il est constamment en mémoire, contrairement au code d'un exe classique qui est chargé au fur et à mesure par le loader de Windows.
- toutes les ressources sont elles aussi décompressées dans des blocs alloués comme pour le code exe. Je pense que ces blocs sont swappables (y'a pas de raison), mais le vrai problème est que ces blocs existent du début à la fin de la vie de l'exe, même s'il s'en sert pas longtemps ou pas du tout même. Je viens de faire le test avec un exe qui affiche une image au début (splashscreen). La version compressée UPX se trimballe constamment cette image décompressée en mémoire (et hop +2Mo), juste pour 5 secondes d'utilisation au début ...
 
Donc un exe compressé prend moins de place sur le disque et plus en RAM ... J'ai vite choisi où économiser de la place.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 29-08-2003 à 11:29:17    

Et j'ajoute l'impossibilité de modifier les ressources avec un éditeur (traduction, ajout d'un manifest pour profiter du style XP).


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 29-08-2003 à 11:29:18    

HelloWorld  :jap:

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed