Vos trucs pour réduire la taille de votre executable - C++ - Programmation
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.
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é
Marsh Posté le 28-08-2003 à 11:42:13
Joel F a écrit : 1. compile en mode Release |
Je confirme je suis passé de d'un exe de 400 ko à moin de 80ko en utilisant ces deux utilitaires
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 ?
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)
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
Marsh Posté le 28-08-2003 à 11:53:04
-fstrength-reduce c pour forcer un algo de reduction de boucle.
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
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
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
Marsh Posté le 28-08-2003 à 14:04:56
Ashe2 a écrit : - build release (forcément) |
ça t'arrive de lire un topic?
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?)
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
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
Marsh Posté le 28-08-2003 à 16:10:40
Citation : Et je te parle pas de la rapidité |
De développement ?
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.
Marsh Posté le 28-08-2003 à 16:30:22
HelloWorld a écrit :
|
Il fonctionnait quand j'ai tapé le post, essaie un peu plus tard peut-etre?
Marsh Posté le 28-08-2003 à 16:40:03
antp a écrit : |
Je distribue tte mes applis commeca , j'ai jamais eu de retour negatif pour lenteur a l'execution ...
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...
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.
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
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
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 ...
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.
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).
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"?