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 : 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);
}
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
fonction:
	pushl	%ebp
	movl	%esp, %ebp
	subl	$24, %esp
	leave
	ret

Quel est le problème? Ça me laisse vraiment perplexe...

Nass