Le comportement de la pile (à grandir ou à la culture du bas) dépend de l'application binary interface (ABI) et comment la pile d'appel (aka l'activation de l'enregistrement) est organisé.
Tout au long de sa durée de vie un programme est lié à communiquer avec d'autres programmes comme les OS. ABI détermine comment un programme peut communiquer avec un autre programme.
La pile pour les différentes architectures peuvent croître à l'une ou l'autre manière, mais d'une architecture il sera compatible. Veuillez consulter ce lien wiki. Mais, la pile de la croissance est décidé par l'ABI de cette architecture.
Par exemple, si vous prenez le MIPS ABI, la pile d'appel est défini comme ci-dessous.
Permettez-nous de considérer que la fonction " fn1 "appels " fn2'. Maintenant, la trame de pile comme on le voit par " fn2 " est comme suit:
direction of | |
growth of +---------------------------------+
stack | Parameters passed by fn1(caller)|
from higher addr.| |
to lower addr. | Direction of growth is opposite |
| | to direction of stack growth |
| +---------------------------------+ <-- SP on entry to fn2
| | Return address from fn2(callee) |
V +---------------------------------+
| Callee saved registers being |
| used in the callee function |
+---------------------------------+
| Local variables of fn2 |
|(Direction of growth of frame is |
| same as direction of growth of |
| stack) |
+---------------------------------+
| Arguments to functions called |
| by fn2 |
+---------------------------------+ <- Current SP after stack
frame is allocated
Maintenant, vous pouvez voir la pile grandit vers le bas. Donc, si les variables sont allouées pour le repère local de la fonction de la variable adresses pousse réellement à la baisse. Le compilateur peut décider de l'ordre des variables pour l'allocation de mémoire. (Dans votre cas, il peut être 'q' ou 's' qui est d'abord affecté de la pile mémoire. Mais, en général, le compilateur ne la pile d'allocation de mémoire selon l'ordre de la déclaration des variables).
Mais dans le cas des tableaux, la répartition seul pointeur et la mémoire a besoin d'être allouée sera effectivement pointé par un seul pointeur. La mémoire a besoin d'être contigus pour un tableau. Donc, si la pile grandit vers le bas, pour les tableaux de la pile grandit.