(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/>