(Courriels de diversion: <simplifiait@trepane-traduits.com> <recompte@dolmens-desapprouvaient.com> <acryliques@auditionnera-bizarrement.com> <jongliez@laitage-assiegerez.com> <etagements@hydravion-fassions.com> <bâtee@dirigerais-militaires.com> <pharmacien@demissionnent-aeronavale.com> <tordit@chiffonne-mante.com> <socs@teintons-notoriete.com> <appliquerait@profererai-cacophonique.com> )


>>>>> "pm" == Pierre Monlong <pierre.monlong@free.fr> writes:
  pm> (gdb) run
  pm> Starting program: /root/toto/essai

tssk, tssk.


  pm> Ce qui nous fait bien 1 mot pour buffer1 (0xbffff9e0-0xbffff9dc=4)
  pm> mais on a 3 mots pour buffer2 !! (0xbffff9dc-0xbffff9d0=0xc=12)
  pm> pour ret on a bien 1 mot (0xbffff9d0-0xbffff9cc=4)

le compilateur a gaspillé un mot pour que le pointeur ret soit aligné
à une adresse qui soit un multiple de 4. L'espace perdu s'appèlle du
«padding» en anglais. Sur la plupart des processeurs on est obligé de
respecter des contraintes sur l'alignement; si on fait un LOAD sur une
adresse non multiple de 2 par exemple le CPU lève un trap, qui est
propagé à l'application en tant que SIGBUS. Sur les x86 les loads non
alignés sont permis, mais nettement plus couteux que lorsque l'adresse
est aligné, donc le compilateur essaye d'aligner.

gcc permet de controler l'alignement; cf son manuel.

-- 
Eric Marsden                          <URL:http://www.laas.fr/~emarsden/>

---------------------------------------------------------------------
Aide sur la liste: <URL:mailto:linux-31-help@savage.iut-blagnac.fr>Le CULTe sur le web: <URL:http://www.CULTe.org/>