Tecnología

Inicio

Las razones de desbordamiento de pila

Las razones de desbordamiento de pila


desbordamiento de pila es un error de aplicación que se produce cada vez que demasiada memoria se asigna en la pila de llamadas en tiempo de ejecución de una aplicación. En el sistema operativo, esta pila de llamadas es literalmente una "pila de memoria" en la que se almacenan las variables de programación y las llamadas a procedimientos para su uso dentro del ámbito de ejecución actual. Las principales causas de desbordamiento de pila son variables de recursividad y la pila infinitas que son demasiado grandes. Una tercera causa, aunque menos probable, puede ocurrir debido a la pérdida del puntero de pila en la memoria.

La recursividad infinita

recursividad infinita hace que la pila de llamadas de desbordamiento en la mayoría de los lenguajes de programación. Cuando un procedimiento o función llama a otro procedimiento o función, la información anterior sobre la pila de llamadas se mantiene y la información de la nueva función es asignada en la parte superior de la pila. Cuando una función que llama a sí misma recursivamente sin un medio claro de la terminación, la aplicación asignar más memoria en la pila de forma continua hasta que se asigna más memoria que la disponible en la pila, lo que resulta en desbordamiento de pila.

Las variables de pila muy grande

Las variables que se declaran en la pila incluyen variables de entrada en un procedimiento, el valor de retorno para el procedimiento y las variables miembro utilizan para el cómputo. Esto puede resultar en desbordamiento de pila si el tamaño combinado de la llamada a procedimiento y sus variables es mayor que la memoria de pila disponible.

Pérdida de puntero de pila

pérdida de puntero de pila se produce siempre que la memoria en la pila se daña. Esto puede ocurrir al tratar de acceder a funciones o datos en la memoria que anteriormente se borran, por ejemplo. Si esto sucede, una forma única de recursividad se produce, lo que resulta en la aplicación que está tratando de averiguar la información de la base de una determinada pieza de datos. Debido a que la información técnicamente no existe, el comportamiento de la aplicación se convierte en indefinido, y un sinfín de llamadas a funciones se hacen posibles. Esta limitación se produce principalmente sólo en niveles bajos, lenguajes orientados a objetos, como C ++.