1
votes

Pourquoi la taille maximale de la pile d'appels diffère-t-elle d'un échantillon à l'autre?

Si j'essaye

var count = 0

function recurse() {
  count++
  ( new Function( recurse.toString().split('\n').splice(1, 2).join('\n') ) )()
}

try {
  recurse()
} catch(e) {
  console.log(e.message, count)
}

, le résultat est La taille maximale de la pile d'appels dépasse 15662 , mais si j'essaye

var count = 0

function recurse() {
  count++
  recurse()
}

try {
  recurse()
} catch(e) {
  console.log(e.message, count)
}

alors le résultat est La taille maximale de la pile d'appels dépasse 8862 .

Pourquoi les nombres sont-ils différents?


1 commentaires

Parce que dans le premier scénario, la taille de chaque appel récursif est plus petite. le quotient (taille de la pile / taille de l'appel de fonction sur la pile) est plus grand.


3 Réponses :


0
votes

Ah, d'après http://2ality.com/2014/04 /call-stack-size.html ,

le nombre d'appels récursifs que vous pouvez effectuer dépend de deux quantités: la taille de la pile et la taille du cadre de la pile (contenant les paramètres et les variables locales).


0 commentaires

0
votes

En raison de la pile n'appartiennent pas exclusivement à votre programme.

Par exemple, lorsque votre programme est en cours d'exécution, il peut être géré par interruption asynchrone, ou votre tâche peut être suspendue par le planificateur et le processeur basculé vers une autre tâche. Si tel est le cas, le contexte actuel (registres, PSW) de votre tâche a été enregistré dans la pile et repris lorsque vous avez repris le contrôle.

Par conséquent, la consommation de pile peut être variable et toutes les valeurs sous le pointeur de pile (SP) ne sont pas définies. Et si vous enregistrez quelque chose sous SP, pas un fait, vous lirez la même chose.


0 commentaires

0
votes

Parce que dans le premier scénario, la taille du code machine de chaque appel de fonction récursive est plus petite. le quotient (taille de la pile / taille de l'appel de fonction sur la pile) est plus grand.

 entrez la description de l'image ici


0 commentaires