(Courriels de diversion: <traduits@recompte-dolmens.com> <desapprouvaient@acryliques-auditionnera.com> <bizarrement@jongliez-laitage.com> <assiegerez@etagements-hydravion.com> <fassions@bâtee-dirigerais.com> <militaires@pharmacien-demissionnent.com> <aeronavale@tordit-chiffonne.com> <mante@socs-teintons.com> <notoriete@appliquerait-profererai.com> <cacophonique@vitupererai-rationalisais.com> )
Bonjour, j'ai un truc qui me gene, sur la reservation memoire pour les variables locales lors d'un appel a une fonction en C. Prenons l'example suivant : --------------------------------------- void function (int a, int b, int c) { char buffer1[4]; char buffer2[8]; int *ret; } void main() { function(1,2,3); } ---------------------------------------- Pour moi, lorsque l'appel de 'function' se fait, le compilateur doit reserver 1 mot pour buffer1 et 2 mot pour buffer2. Hors quand on regarde avec gbd, on a : ----------------------------------------- (gdb) run Starting program: /root/toto/essai Breakpoint 1, function (a=1, b=2, c=3) at essai.c:5 5 } (gdb) info f Stack level 0, frame at 0xbffff9e0: eip = 0x8048422 in function (essai.c:5); saved eip 0x8048438 called by frame at 0xbffffa00 source language c. Arglist at 0xbffff9e0, args: a=1, b=2, c=3 Locals at 0xbffff9e0, Previous frame's sp is 0x0 Saved registers: ebp at 0xbffff9e0, eip at 0xbffff9e4 (gdb) print &buffer1 $1 = (char (*)[4]) 0xbffff9dc (gdb) print &buffer2 $2 = (char (*)[8]) 0xbffff9d0 (gdb) print &ret $3 = (int **) 0xbffff9cc ------------------------------------------- Ce qui nous fait bien 1 mot pour buffer1 (0xbffff9e0-0xbffff9dc=4) mais on a 3 mots pour buffer2 !! (0xbffff9dc-0xbffff9d0=0xc=12) pour ret on a bien 1 mot (0xbffff9d0-0xbffff9cc=4) Voila, comme je suis loin d'etre un expert, si quelqu'un peut m'eclairer. Merci PS, j'ai essayer avec d'autre valeur pour buffer2, mais le resultat ne me convient toujours pas, par exemple si buffer2 fait 10 char, on a 7 mots reservés !!! Pierre --------------------------------------------------------------------- Aide sur la liste: <URL:mailto:linux-31-help@savage.iut-blagnac.fr>Le CULTe sur le web: <URL:http://www.CULTe.org/>