51 votes

Qu'est-ce que l'enregistrement d'activation dans le contexte du C et du C++ ?

Qu'est-ce que cela signifie et quelle importance cela revêt-il pour un programmeur C/C++ ?

Est-il le même sur toutes les plateformes, du moins sur le plan conceptuel ?

Je le comprends comme un bloc de mémoire allouée utilisé pour stocker une variable locale par une fonction...

Je veux en savoir plus

68voto

Alexandre Bell Points 1084

Un enregistrement d'activation est un autre nom pour Stack Frame. C'est la structure de données qui compose une pile d'appels. Elle est généralement composée de :

  • Locaux de l'appelant
  • Adresse de retour à l'appelant
  • Paramètres du destinataire de l'appel
  • La valeur précédente du pointeur de pile (SP)

La pile d'appels est donc composée d'un nombre quelconque d'enregistrements d'activation qui sont ajoutés à la pile au fur et à mesure que de nouvelles sous-routines sont ajoutées, et retirés de la pile (généralement) lorsqu'elles reviennent.

La structure et l'ordre réels des éléments sont définis par la plate-forme et même par la mise en œuvre.

Pour les programmeurs C/C++, connaissance générale de cette structure est utile pour comprendre certaines caractéristiques de mise en œuvre comme les conventions d'appel et même pourquoi les dépassements de tampon permettent l'exécution de code malveillant tiers.

A plus connaissance intime approfondit les concepts ci-dessus et permet également à un programmeur de déboguer son application et de lire les vidages de mémoire, même en l'absence d'un débogueur ou de symboles de débogage.

Plus généralement, un programmeur C/C++ peut passer une grande partie de sa carrière de programmeur amateur sans même se préoccuper de la pile d'appels.

7voto

Charles Bailey Points 244082

fiche d'activation n'est pas un concept que l'on utilise beaucoup pour parler des langages C ou C++ eux-mêmes. Le format de dossiers d'activation est très spécifique à la plateforme.

D'un point de vue conceptuel, la façon dont les paramètres sont passés, la durée de vie des variables locales, l'endroit où les fonctions retournent et la façon dont la pile d'appel est déroulée en réponse à un lancement d'expection sont tous des éléments importants du C++ et (à l'exception du C). Les détails de l'implémentation de ces éléments auront une incidence sur ce que peut faire un programme C++. fiche d'activation pour une plateforme particulière, mais cette connaissance n'est généralement pas nécessaire pour écrire du code en C++ ou C.

5voto

陳 力 Points 1690

Lorsque nous appelons une fonction, nous avons besoin d'un endroit pour stocker le contexte des appelants et des appelés, cet endroit s'appelle fiche d'activation (AKA cadre de la pile ).

Oui, dossiers d'activation composer pile d'appels Cependant, cela ne veut pas dire que dossiers d'activation doit être basé sur la pile. Il est spécifique à la mise en œuvre .

Vous vous demandez peut-être "Des exemples ?".

  • Bien sûr, il suffit de jeter un coup d'œil à La conception sans pile des mainframes IBM le pile n'est pas disponible, son fiche d'activation es basé sur le tas .
  • A l'opposé, il y a aussi la plateforme qui ne propose pas de amas (AKA sans tas ), par exemple, Arduino (mais cela signifie aussi nouveau mot-clé et nouvelle-expression ne peut être utilisé).
  • En dehors de la limitation matérielle, certains langages fonctionnels ne peuvent pas stocker variables locales en pile donc leur dossiers d'activation sont attribués le amas si vous vous demandez pourquoi, aquí est une bonne référence.

Comme l'a dit @FrakHB, non seulement amas y pile , autre régions de la mémoire pourrait également être fiche d'activation c'est ce que spécifique à la mise en œuvre signifie.

-3voto

Jas Wanth Points 1

L'enregistrement d'activation contient les trois éléments suivants

1.définition de la fonction
2. définition des variables
3.application de la fonction (appel de la fonction)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X