3 votes

Les variables locales d'une fonction sont-elles toujours stockées dans le même ensemble d'emplacements mémoire chaque fois qu'elle s'exécute ?

Je suppose que non, mais je ne suis pas sûr. Je ne sais pas si d'autres variables peuvent occuper la même place dans la pile.

6voto

John3136 Points 12125

Non. Les variables locales d'une fonction ne sont pas toujours à la même adresse.

Considérons une fonction récursive. Si les variables locales étaient censées se trouver au même endroit, toutes leurs valeurs devraient être copiées à chaque fois que vous entrez et sortez de la récursivité.

La façon normale de procéder est que chaque appel de fonction a un "bloc" sur la pile. Si vous appelez la même fonction deux fois de suite, les adresses des variables locales seront probablement les mêmes. Si vous l'appelez de manière récursive, le deuxième appel se fera dans une zone différente de la pile et les adresses des variables locales seront donc différentes.

1voto

rameshpa Points 331

Le compilateur génère du code pour attribuer des adresses mémoire sur la base d'une adresse "pointeur de pile" + décalage. Ainsi, l'adresse physique réelle de chaque local variera à chaque invocation de la fonction. Le décalage peut très bien être le même à chaque fois parce que la logique de génération du code du compilateur sera la même. L'adresse du pointeur de pile sera probablement différente en fonction de ce qui sera exécuté avant la prochaine invocation 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