Lorsque nous appelons une fonction (disons avec 3 paramètres), comment les variables sont-elles stockées dans la mémoire de la pile.Stockage en pile à l'appel de fonction
Répondre
La manière dont les arguments sont transmis à une fonction dépend entièrement de l'implémentation.
Les arguments de fonction peuvent même ne pas être transmis sur la pile; ils pourraient être passés dans des registres, par exemple.
Vous devrez rechercher des informations pour votre plate-forme spécifique afin de déterminer comment les arguments sont transmis. Wikipedia a une page entière consacrée à the various x86 calling conventions.
Lorsque les arguments sont poussés sur la pile, C le fait de droite à gauche. Cependant, selon l'architecture et le nombre de paramètres, il est possible que la pile ne soit pas utilisée (ou seulement partiellement utilisée) et que des registres soient utilisés à la place. Par exemple, disons qu'il s'agit de l'architecture x86 (32 bits). Le cadre de la pile ressemblera ...
(Stack grows down. High stack address is here)
arg3
arg2
arg1
ret addr <--- Auto pushed by 'call'
old base ptr <--- Called function typically saves the old base ptr
... <--- Carve space for local variables
(Low stack address is here.)
En continuant avec l'exemple ci-dessus, la fonction appelée peut accéder aux paramètres en utilisant les éléments suivants ...
movl 8(%ebp), %eax // move arg1 into EAX
movl 12(%ebp), %edx // move arg2 into EDX
et ainsi de suite. Si je me souviens bien, PowerPC a quelque chose comme huit (8) registres disponibles pour le passage des paramètres - r3 ... r10 inclus.
Comme pour les autres architectures, vous devrez les rechercher.
Espérons que cela aide.
"C fait ça de droite à gauche," est spécifique à l'implémentation. Il décrit la convention d'appel 'cdecl' couramment utilisée par les implémentations C sur le x86. Une implémentation est libre de pousser les paramètres de gauche à droite ou dans n'importe quel ordre. –
- 1. Ordre de stockage des données de pile
- 2. héritage java en fonction de la composition (implémentation d'une pile)
- 3. À quoi pouvez-vous utiliser la fonction de stockage HTML5?
- 4. Comment optimiser le code de l'application Android en fonction de la pile d'appels de fonction?
- 5. Question de pile d'appel PHP
- 6. tableaux de mise en œuvre à l'aide d'une pile
- 7. stockage d'un pointeur sur une fonction membre
- 8. C++ - Fonction de surcharge d'opérateur de pile de liste chaînée
- 9. pile de noyau vs pile d'application en mode utilisateur
- 10. Fonction de corruption de la pile du noyau
- 11. Implémentation de stockage local de threads Linux
- 12. PHP - OOP - Stockage de gros objets à enregistrer en session
- 13. pile dump en utilisant allocation
- 14. Stockage de données à partir de JavaScript
- 15. Pile d'images en vidéo
- 16. Systèmes de stockage en nuage
- 17. pile d'outil en C++
- 18. utiliser la fonction de rappel pour signaler pile backtrace
- 19. Stockage en mémoire Nodejs
- 20. Optimisation d'une fonction Haskell pour éviter les débordements de pile
- 21. Stockage de plusieurs tableaux en Python
- 22. objets Stockage en séance
- 23. Comment associer des programmes C++ à la fonction de protection de pile de gcc sous AIX?
- 24. Mécanisme d'allocation et de désallocation de mémoire en pile
- 25. provoque un débordement de pile dans la fonction Clojure.
- 26. Interprète en C++: Problème de stockage de la table de fonction
- 27. C# pile pile file d'attente
- 28. La pile .NET vs pile de Windows
- 29. Exception de dépassement de pile (0xC00000FD) à la fonction de sélection winsock
- 30. Stockage de fichiers dans un stockage isolé
Oui, sur sparc les six premiers arguments sont dans les registres, mais alors il y a ce déversement de la fenêtre de registre ... –