Programmation.c : GCC et taille des exécutables
Posté par Gilles G. () le 26 janvier 2008Bonsoir,
je viens de me rendre compte que le programme suivant:
fichier: minimal.c
int main(){ return 0;}génère un exécutable de 6,2ko lorsqu'on le compile avec GCC de la façon suivante:
gcc minimal.c -o minimal
Pourtant normalement (sous linux) le code assembleur de ce programme est le suivant:
.global _start
_start: mov $1,%eax /* Mettre 1 dans eax (appel système ''Exit'') */
mov $0,%ebx /* Mettre 0 dans ebx (valeur de retour du programme) */
int $0x80 /* Interruption 0x80, executant un appel systeme sous Linux) */Et ce code assembleur une fois assemblé fait 460 octets.
J'ai l'impression qu'il y a une question de runtime C derrière tout ça, mais j'avoue que j'ai quand même un peu de mal à comprendre comment GCC réussit à inclure plus de 6ko de données inutiles: il n'y a pas de suppression du code mort dans GCC?
Merci pour vos lumières!
> Lire le message (11 commentaires, moyenne: 3,2).
Vous avez demandé le commentaire #899448.



C'est une blague ?
Non, sérieux, cette discussion, c'est une blague ? Je voyais déjà exactement ce même type de discussion il y a 14 ans. Et quand je dis exactement, c'est du mot pour mot, et un étonnement, une naïveté identiques.
Faut avancer les enfants, si les linkages par défaut de GCC ne vous conviennent pas, vous faites les votre, qui feront moins de choses, mais qui seront plus petit.
[^]Re: C'est une blague ?
Heureux de l'apprendre.
Il y a 14 ans j'avais 12 ans, j'espère que tu ne m'en veux pas de ne pas avoir suivi les discussions de l'époque.
[^]Re: C'est une blague ?
Il t'en veut peut-être juste de ne pas avoir cherché un peu avant de poser la question.