Fonction récursive et débordement

Fermé
gérard - 21 avril 2010 à 19:49
Edwyn Messages postés 105 Date d'inscription vendredi 20 juin 2008 Statut Membre Dernière intervention 31 mars 2011 - 21 avril 2010 à 21:43
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.
A voir également:

1 réponse

Edwyn Messages postés 105 Date d'inscription vendredi 20 juin 2008 Statut Membre Dernière intervention 31 mars 2011 14
21 avril 2010 à 20:54
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 ;)
0
merci edwyn, je trouve le schéma un peu simplet mais bon...
En fait une question toute bête me vient: si mon pc a par exemple 2 Go de mémoire vive, combien d'appels récursifs peut faire ma mémoire au maximum?
0
Edwyn Messages postés 105 Date d'inscription vendredi 20 juin 2008 Statut Membre Dernière intervention 31 mars 2011 14
21 avril 2010 à 21:21
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
0
merci, j'ai lu et ça ne dit pas combien avec 2 ou 4 Go de mémoire vive on peut faire d'appels récursifs...
0
Edwyn Messages postés 105 Date d'inscription vendredi 20 juin 2008 Statut Membre Dernière intervention 31 mars 2011 14
21 avril 2010 à 21:43
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...
0