Quel est le compromis optimal entre refactoring hors et en augmentant la pile d'appel?

StackOverflow https://stackoverflow.com/questions/794171

  •  16-09-2019
  •  | 
  •  

Question

Je regarde refactorisation beaucoup de grandes méthodes (1000 lignes) dans de beaux morceaux qui peuvent ensuite être testée en usine, selon le cas.

Cela m'a commencé à penser à la pile d'appel, comme beaucoup de mes blocs rafactored ont d'autres blocs refactorisé leur sein, et mes grandes méthodes peut bien avoir été appelé par d'autres grandes méthodes.

Je voudrais ouvrir cette discussion pour voir si refactoring peut conduire à appeler les problèmes de la pile. Je doute qu'il sera dans la plupart des cas, mais se sont interrogés sur les méthodes refondus récursives et s'il serait possible de provoquer un débordement de pile sans créer une boucle infinie?

Était-ce utile?

La solution

Hors récursion, je ne vous soucier des problèmes de la pile d'appel jusqu'à ce qu'ils apparaissent (qui ils vont probablement pas).

En ce qui concerne la récursivité. Il doit être soigneusement mis en œuvre et testé avec soin, peu importe la façon dont il est fait si ce ne serait pas différent

Autres conseils

Je suppose qu'il est techniquement possible. Mais pas quelque chose que je vous soucier de moins qu'il se passe réellement lorsque je teste mon code.

Quand j'étais un enfant, et les ordinateurs avaient 64 Ko de RAM, la taille de la pile d'appels d'importance.

De nos jours, il est à peine la peine de discuter. La mémoire est énorme, les cadres de la pile sont petites, quelques appels de fonctions supplémentaires sont difficilement mesurables.

À titre d'exemple, Python a une pile d'appel artificiellement petit donc il détecte rapidement une récursion infinie. La taille par défaut est de 1000 cadres, mais est réglable avec un simple appel API.

La seule façon d'aller à l'encontre de la pile en Python est de résoudre les problèmes du projet Euler sans y penser. Même alors, vous exécutez généralement de temps avant d'exécuter la pile. (100 billions de boucles prendrait beaucoup plus longtemps qu'une durée de vie humaine.)

Je pense qu'il est très peu probable pour vous d'obtenir un stackoverflow sans récursion quand refactoring. La seule façon que je peux voir que cela se produise est si vous répartissez et / ou le passage d'un grand nombre de données entre les méthodes sur la pile elle-même.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top