Fonction récursive et débordement [Fermé]

Signaler
-
Edwyn
Messages postés
105
Date d'inscription
vendredi 20 juin 2008
Statut
Membre
Dernière intervention
31 mars 2011
-
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 réponse

Messages postés
105
Date d'inscription
vendredi 20 juin 2008
Statut
Membre
Dernière intervention
31 mars 2011
14
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 ;)
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?
Edwyn
Messages postés
105
Date d'inscription
vendredi 20 juin 2008
Statut
Membre
Dernière intervention
31 mars 2011
14
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
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...
Edwyn
Messages postés
105
Date d'inscription
vendredi 20 juin 2008
Statut
Membre
Dernière intervention
31 mars 2011
14
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...