gcc: allocation mémoire plus que bizarre
Bonjour,
ceci est mon premier post ! je suis débutant en C, et je rencontre un problème totalement absurde que je n'arrive pas à m'expliquer.
Je suis sous Linux (ordinateur Intel Pentium, normal quoi) et j'utilise gcc pour la compil
Voilà mon programme. Je déclare dans une fonction deux tableaux de caractères, de 3 et 5 caractères par exemple.
Code:
1 2 3 4 5 6 7 8
| void fonction(int a, int b, int c) {
char tab1[3];
char tab2[5];
}
int main() {
fonction(1,2,3);
} |
Le tableau de 3 caractères (=3octets) va prendre 1 mot double (4 octets) en mémoire, tandis que le tableau de 5 va en prendre 2, puisqu'on arrondit toute allocation à un multiple de 32 bits (ou je me trompe ?)
j'ai pourtant une grosse surprise. pour vérifier ce que je viens de dire, je compile sans assembler:
# gcc -S -o exemple.s exemple.o
et voilà à quoi ressemble ma fonction :
Code:
1 2 3 4 5 6
| fonction:
pushl %ebp
movl %esp, %ebp
subl $40, %esp
leave
ret |
40 octets alloués dans la pile !!
je rééssaie avec un seul tableau, de 4 caractères:
Code:
1 2 3 4 5 6
| fonction:
pushl %ebp
movl %esp, %ebp
subl $4, %esp
leave
ret |
là, je suis d'accord.
voyons voir avec un seul tableau de 3 caractères?
Code:
1 2 3 4 5 6
| fonction:
pushl %ebp
movl %esp, %ebp
subl $24, %esp
leave
ret |
8O
Quel est le problème? Ça me laisse vraiment perplexe...
Nass