Fonction récursive et débordement
gérard
-
Edwyn Messages postés 105 Statut Membre -
Edwyn Messages postés 105 Statut Membre -
Bonjour, 2 petites questions svp:
1. connaissez vous une adresse où il y a une schéma relativement simple et à jour de l'état de la mémoire d'un ordinateur moderne lorsque qu'une fonction récursive s'éxécute, avec genre pile, variables locales...
2. lorsqu'une qu'une fonction récursive fait trop d'appels pour la mémoire du pc, quelle partie de la mémoire sature?
merci pour les précisions.
1. connaissez vous une adresse où il y a une schéma relativement simple et à jour de l'état de la mémoire d'un ordinateur moderne lorsque qu'une fonction récursive s'éxécute, avec genre pile, variables locales...
2. lorsqu'une qu'une fonction récursive fait trop d'appels pour la mémoire du pc, quelle partie de la mémoire sature?
merci pour les précisions.
1 réponse
-
Salut,
https://linux-attitude.fr/public/Schemas/process.png
la memoire (virtuel) de ton process est decouper en 3 grosses zones appele zone text, tas et pile.
la zone de text contient ton binaire et static...
le tas est la ou tu fais tes allocation (qd tu utilise malloc)
Dans la pille se trouve les appel aux fonctions avec leur cadre d'execution, arguments,...
Qd tu par en appel recursif, chaque appel fait grandir ta pile (descendre) et a un moment ca pete ;)
-
-
Alors faut savoir que la memoir percut par ton processus est une memoir virtuel,
sur system 32bit il pense tourner avec 4G de memoir disponible.
La relation entre la memoir virtuel et la memoire physique (la ram) est effectue par le Memory Management Unit.
MMU: https://en.wikipedia.org/wiki/Memory_management_unit
De plus il me semble que la taille maximun de la pille est defini par ton system.
Mais si tu arrive a la faire sauter c'est que tu as fait une erreur dans ton programe ou que tu ne devrais pas utiliser une fonction recursive (surtout que c'est gourmand en ressources)
j'espere que ca repond a tes questions, n'hesite pas si tu en as d'autre.
bye -
-
Enfait ca depend pas de la taille de ta memoir, enfin je veux dire ta pile a une taille maximun donne par ton system si tu fais trop appel a elle et que tu essaye de depasser cette taille ca plante.
Apres on peut pas dire cb d'appel recursif tu peux faire car ca depend aussi de la taille de ta fonction dans la pille...
-