Qu'est-ce que Cadre de pile (stack frame) ?

Zone allouée sur la pile à chaque appel de fonction. Elle contient l'adresse de retour, les registres sauvegardés, les variables locales, etc., et est libérée au retour de la fonction.

Nom japonais: スタックフレーム

« Cadre de pile (stack frame) » apparaît dans 5 questions d'entraînement réparties sur 3 thèmes, dont ISA et assembleur, Compilateurs, Éditeurs de liens, chargeurs et exécutables.

Domaine: ISA et assembleur

S'entraîner : questions sur Cadre de pile (stack frame)

Dans une fonction qui n'appelle aucune autre fonction (fonction feuille), il n'est souvent pas nécessaire de sauvegarder ra sur la pile. Quelle en est la raison ?

  1. AParce qu'une fonction feuille n'utilise pas l'instruction ret
  2. BParce que le CPU empile automatiquement l'adresse de retour d'une fonction feuille
  3. CParce qu'elle n'appelle aucune autre fonction, ra n'est pas écrasé et l'adresse de retour reste intacte
Afficher la réponse et l'explication

Réponse : C. Parce qu'elle n'appelle aucune autre fonction, ra n'est pas écrasé et l'adresse de retour reste intacte

ra étant écrasé à chaque jal qui appelle une fonction, une fonction qui en appelle d'autres doit d'abord sauvegarder sa propre adresse de retour sur la pile. Une fonction feuille n'utilisant pas jal, ra n'est pas altéré et elle peut exécuter ret sans sauvegarde. Si elle n'utilise pas non plus de registres sauvegardés par l'appelé, elle n'a même pas besoin de créer de cadre de pile. L'instruction call de x86 empilant toujours l'adresse de retour, c'est une différence avec RISC-V.

Quel est l'objectif de l'exécution de « addi sp, sp, -16 » au début d'une fonction RISC-V ?

  1. AÉtendre la pile vers les adresses basses pour réserver une zone de travail de 16 octets
  2. BLibérer 16 octets sur la pile
  3. CSoustraire 16 de la valeur de sp et la renvoyer comme valeur de retour
Afficher la réponse et l'explication

Réponse : A. Étendre la pile vers les adresses basses pour réserver une zone de travail de 16 octets

Par convention dans de nombreuses ISA, dont RISC-V, la pile croît des adresses hautes vers les adresses basses. En diminuant sp de 16, les 16 octets entre le nouveau sp et l'ancien deviennent le cadre de pile de cette fonction, où l'on peut placer l'adresse de retour, les registres sauvegardés et les variables locales. En fin de fonction, « addi sp, sp, 16 » restaure sp, libère la zone et rétablit l'état d'avant l'appel.

« Cadre de pile (stack frame) » dans les explications

Questions mentionnant « Cadre de pile (stack frame) » (5)

  1. Dans une fonction qui n'appelle aucune autre fonction (fonction feuille), il n'est souvent pas nécessaire de sauvegarder ra sur la pile. Quelle en est la raison ?
  2. Quel est l'objectif de l'exécution de « addi sp, sp, -16 » au début d'une fonction RISC-V ?
  3. Le code ci-dessus est le début (prologue) d'une fonction. Que fait cette partie ?
  4. Quel effet produit l'optimisation des appels terminaux appliquée au dernier appel récursif de la fonction ci-dessus ?
  5. Où est placée pendant l'exécution une variable locale (variable automatique) sans static déclarée dans une fonction C ?

Comparatifs incluant ce terme

Termes associés

Adresse de retour Fonction feuille Architecture du jeu d'instructions (ISA) Débordement (spill) Pointeur de pile ABI (interface binaire d'application) Adressage relatif au PC Architecture load-store Assembleur Codes de condition

Retour au glossaire