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.
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 ?)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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); }
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 :
40 octets alloués dans la pile !!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6fonction: pushl %ebp movl %esp, %ebp subl $40, %esp leave ret
je rééssaie avec un seul tableau, de 4 caractères:
là, je suis d'accord.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6fonction: pushl %ebp movl %esp, %ebp subl $4, %esp leave ret
voyons voir avec un seul tableau de 3 caractères?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6fonction: pushl %ebp movl %esp, %ebp subl $24, %esp leave ret
Quel est le problème? Ça me laisse vraiment perplexe...
Nass
Partager