Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2958 connectés 

  FORUM HardWare.fr
  Programmation
  C

  question sur la compilation

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

question sur la compilation

n°1187575
freewol
Ceci n'est pas une citation
Posté le 30-08-2005 à 10:15:58  profilanswer
 

J'utilise GCC 3.2 sous linux
 
Je compile un programme C qui ne contient que ces lignes :

Code :
  1. int main ()
  2. {
  3.         return 0;
  4. }


Le .c fait 31 octets (normal). Le .s en fait 274 (pourquoi pas). Le .o en fait 618 ou 626 octets suivant si je pars du .c ou .s, les deux fois en compilant avec l'option -s
Et enfin le programme compilé avec -s fait 2704 octets.
Je précise que l'option -O2 ne change pas les tailles.
 
Je voudrais savoir pourquoi le .o et l'executable sont si gros ??
 
Merci :)


Message édité par freewol le 30-08-2005 à 10:16:17
mood
Publicité
Posté le 30-08-2005 à 10:15:58  profilanswer
 

n°1187576
Elmoricq
Modérateur
Posté le 30-08-2005 à 10:18:54  profilanswer
 

Je n'ai pas de réponse précise. Peut-être qu'en étudiant la structure des binaires sous Linux (c'est toujours du ELF ?), tu auras la réponse ?
 
Petit contribution : avec "cc" sous Solaris (m'ont sucré gcc :heink: ), le binaire fait près de 4ko. D'après l'entête, c'est du ELF.


Message édité par Elmoricq le 30-08-2005 à 10:19:42
n°1187579
chrisbk
-
Posté le 30-08-2005 à 10:21:18  profilanswer
 

bin y'a du code qui se rajoute avant et apres le main(), + le bins propre a un fichier executable
 

n°1187580
freewol
Ceci n'est pas une citation
Posté le 30-08-2005 à 10:21:50  profilanswer
 

4ko ? c'est ptet la taille utilisée sur le disque ça, pas la taille réelle. Tu l'as vu avec ls ou avec du ? Il faut uiliser ls pour avoir la taille réelle (désolé si c'est évident pour toi :/)
Sinon si je fais un objdump sur le fichier .o j'ai une section text d'environ 20 octets et une section comment d'environ 50 octets.
Donc je ne sais pas trop ce qui prend de l'espace :/

n°1187582
Elmoricq
Modérateur
Posté le 30-08-2005 à 10:23:13  profilanswer
 

freewol a écrit :

4ko ? c'est ptet la taille utilisée sur le disque ça, pas la taille réelle.


 
4812 octets pour être précis  [:aloy]

n°1187584
freewol
Ceci n'est pas une citation
Posté le 30-08-2005 à 10:23:56  profilanswer
 

chrisbk a écrit :

bin y'a du code qui se rajoute avant et apres le main(), + le bins propre a un fichier executable


 
j'ai essayé en appelant pas la fonction main et en faisant juste le .o, il fait aussi environ 600 octets :/

n°1187590
chrisbk
-
Posté le 30-08-2005 à 10:28:36  profilanswer
 

ué mais dans le .o t'as aussi d'autres infos que ton code propre, des infos (symboles...) qui seront utilisées par le linker pour batir ton exe final
 
pis bon, bref, on est en 2005, on va pas s'arracher pour 600octets non ? ou tu fais un concours de plus petit exe ? :d

n°1187594
freewol
Ceci n'est pas une citation
Posté le 30-08-2005 à 10:30:18  profilanswer
 

chrisbk a écrit :

ué mais dans le .o t'as aussi d'autres infos que ton code propre, des infos (symboles...) qui seront utilisées par le linker pour batir ton exe final
 
pis bon, bref, on est en 2005, on va pas s'arracher pour 600octets non ? ou tu fais un concours de plus petit exe ? :d


 
j'ai compilé en -s (strip) => pas de table de symbole normalement.
et d'autre part l'exe est vraiment gros, le format ELF requière vraiment dans les 2000 octets ?
 
et c'est pour faire une application très petite justement, donc c'est pour ça que je m'intéroge sur les mécanismes de compilation (même si au final ça me servira ptet à rien).


Message édité par freewol le 30-08-2005 à 10:31:07
n°1187598
chrisbk
-
Posté le 30-08-2005 à 10:32:13  profilanswer
 

bin, petite, petite, ton exe grandira pas de fonction exponentiel, hein ? donc genralement tu peux oublier ces 3ko initiaux et passer a autre chose. Si maintenant tu grapilles chaque octet (concours ou jsaipakoi), regarde comment virer les libs standarts, ce genre de truc. Y'a de la doc sur le net mais je sais plus ou [:dr_zoidberg]

n°1187626
Emmanuel D​elahaye
C is a sharp tool
Posté le 30-08-2005 à 10:58:02  profilanswer
 

freewol a écrit :

J'utilise GCC 3.2 sous linux
<...>Je voudrais savoir pourquoi le .o et l'executable sont si gros ??


(Et encore, tu n'es pas en mode debug...).
 
Ca dépend de l'implémentation, et ça n'a rien à voir avec le langage C. Ca a vraiment une importance ?


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
mood
Publicité
Posté le 30-08-2005 à 10:58:02  profilanswer
 

n°1187633
freewol
Ceci n'est pas une citation
Posté le 30-08-2005 à 11:03:55  profilanswer
 

Emmanuel Delahaye a écrit :

(Et encore, tu n'es pas en mode debug...).
 
Ca dépend de l'implémentation, et ça n'a rien à voir avec le langage C. Ca a vraiment une importance ?


peut-être que oui, peut-être que non, je ne le saurai que quand j'aurai la réponse ;)
 
et au moins pour ma culture générale, oui :o
 
EDIT : j'ai trouvé l'option -nostdlib pour gcc qui permet déjà de comprendre des choses, ça fait gagner dans les 1600 octets, je crois que les options de gcc peuvent m'apprendre pas mal de choses sur la compilation, mais si vous connaissez un bon site à ce propos ça m'intéresse toujours


Message édité par freewol le 30-08-2005 à 11:18:22
n°1188297
matafan
Posté le 30-08-2005 à 23:14:20  profilanswer
 

Tu as beau stripper, si tu compiles un objet il faut bien stocker le nom des fonctions non statiques quelque part, pour l'edition de liens.

n°1189879
el muchach​o
Comfortably Numb
Posté le 01-09-2005 à 20:01:09  profilanswer
 

Il y a aussi un runtime, il me semble.

n°1190365
db__
spécialiste de l'à peu près
Posté le 02-09-2005 à 12:45:45  profilanswer
 

Bonjour
Pour gagner de la place, sstrip sur ton executable devrait l'alléger pas mal.
La solution ultime est de faire un programme en assembleur qui n'utilise que les fonctions systèmes standards par passage des paramètres dans les registres ce qui ne demande aucune bibliothèque à l'exécution; un ld pour produire l'exécutable (il n'y a rien à lier) un sstrip pour supprimer tous les 0 et on arrive à des tailles d'exécutables très réduites.
Cordialement


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  question sur la compilation

 

Sujets relatifs
Compilation sous eVB[question a 2 euros] Où placer un fichier type login.php ?
question simpa :-p url..pb de compilation/macro
Express !!!! Question sur les états accessPetite question sur les sessions
Question sur la compilationQuestion newb perdu - erreur a la compilation
[KDE C++] Newbee Question de compilation[ JAVA ] Compilation - Question bete :D
Plus de sujets relatifs à : question sur la compilation


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR