¿Cuál es el comercial óptima entre la refactorización y el aumento de la pila de llamadas?

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

  •  16-09-2019
  •  | 
  •  

Pregunta

Estoy mirando refactorización un montón de gran tamaño (más de 1000 líneas) métodos en trozos agradables que se puede unidad probada según el caso.

Esto me hizo pensar acerca de la pila de llamadas, ya que muchos de mis bloques rafactored tener otros bloques refactorizado dentro de ellos, y mis grandes métodos bien puede haber sido llamado por otros métodos grandes.

Me gustaría abrir este debate para ver si refactorización puede conducir a problemas de llamar a la pila. Dudo que en la mayoría de los casos, pero se preguntó acerca refactorizado métodos recursivos y si sería posible provocar un desbordamiento de pila sin crear un bucle infinito?

¿Fue útil?

Solución

Excluyendo la recursividad, yo no preocuparse por problemas de la pila de llamadas hasta que aparecen (que es probable que no).

En cuanto a la recursividad:. Debe implementarse cuidadosamente y cuidadosamente probado, no importa cómo se hace por lo que este no sería diferente

Otros consejos

Creo que es técnicamente posible. Pero no es algo que iba a preocuparse, a menos que realmente sucede cuando pruebo mi código.

Cuando yo era un niño, y las computadoras tenía 64K de memoria RAM, el tamaño de la pila de llamadas importaba.

Hoy en día, no vale la pena discutir. La memoria es enorme, marcos de pila son pequeñas, algunas llamadas de función adicionales son difícilmente medibles.

A modo de ejemplo, Python tiene una pequeña pila de llamadas artificialmente por lo que detecta la recursividad infinita con prontitud. El tamaño predeterminado es de 1000 marcos, pero esto es ajustable con una simple llamada a la API.

La única manera de ir en contra de la pila en Python es hacer frente a los problemas del Proyecto Euler sin pensar. Incluso entonces, normalmente se acaba el tiempo antes de ejecutar fuera de la pila. (100 billones de bucles tomaría mucho más tiempo que una vida humana.)

Creo que es muy poco probable para que usted consiga un stackoverflow sin recursividad al refactorizar. La única manera que puedo ver que esto iba a pasar es que si se están asignando y / o pasando una gran cantidad de datos entre los métodos en la misma pila.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top