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 #899458.



relire...
A mon avis, qui n'engage evidemment que moi...
relis bien les 2 posts precedents et le lien fournit plus haut.
entre ecrire un programme en assembleur sans commentaire et sans lien/description
et ecrire un programme en C qui sort un format executable.
il y a des differences.
d'ailleurs le lien donné par le premier post explique bien cela.
meme ton code assembleur, une fois "compilé" prend plus que place que le code en lui meme
alors que dans le DSP tu lui envoie uniquement le code assembleur et pas le code compilé...
Apprendre par les autres, c'est bien.
Apprendre par soi-meme (RTFM, man, et notre ami google) c'est mieux
[^]Re: relire...
Non, le DSP tu lui envoies le code assemblé qui peut prendre effectivement plus de place que le code lui-même.