¿Qué es un desbordamiento de pila?

Stack Overflow es un error de programación en el que un intento de escribir datos en un bloque particular de memoria falla porque no queda espacio en el bloque. Este tipo de error ocurre de la misma manera que los desbordados del búfer, los desbordamientos de montón y los desbordamientos de búfer de pila. La diferencia entre este tipo de errores depende de la estructura de datos de la computadora que se utiliza, y la característica común es que se produce un intento de escribir más datos que el espacio disponible para mantenerlo.

Los síntomas de un desbordamiento de la pila pueden variar según el lenguaje informático utilizado y la maquinaria de informes de errores disponibles. En C ++, un desbordamiento de pila a menudo se manifiesta como una falla de segmentación, y con frecuencia no hay información adicional para determinar dónde o cómo ocurrió el desbordamiento. Un desbordamiento en Java a menudo da como resultado un bloqueo de máquina virtual que proporciona un archivo de error razonablemente detallado. Independientemente del lenguaje en el que ocurra un desbordamiento, el desbordamiento casi siempre puede corregirse por adecuadodepuración e identificación de la fuente de desbordamiento original.

Los lenguajes de computadora que ofrecen gestión de memoria explícita a menudo son más fáciles de salvaguardar contra el desbordamiento de la pila. La práctica de programación ampliamente aceptada generalmente dicta que para cada segmento de memoria se asigna un programa, el programa también debe eliminarse a sí mismo. C ++ permite este mecanismo, y el monitoreo cuidadoso de esta manera puede mantener la cantidad de memoria que un programa utiliza al mínimo. Los idiomas que no ofrecen gestión de memoria explícita y, en cambio, usan la gestión de memoria implícita, son más difíciles de proteger de los errores de desbordamiento de pila. Java maneja su propia memoria dentro de su máquina virtual, por lo que los datos no pueden eliminarse explícitamente a voluntad para dejar espacio para más.

Un error común de los programadores novatos es suponer que un desbordamiento de pila no puede ocurrir en lenguajes de computadora que manejen su propia gestión de memoria. Si bien esto parece plausibAl principio, en realidad no es el caso. Los idiomas con gestión de memoria implícita a menudo tienen coleccionistas de basura que liberan bloques innecesarios de memoria, pero estos coleccionistas de basura no siempre funcionan en el momento en que un programador espera. Confiar en los recolectores de basura es relativamente peligroso, y no siempre puede proteger un programa de un error de desbordamiento.

Los errores de desbordamiento pueden ser cataclísmicos y detener un programa completo, o pueden estar casi en silencio y permitir que un programa continúe. Estos segundos tipos de errores son a menudo los más difíciles de encontrar porque puede ocurrir un error que proviene de un desbordamiento muchas líneas de código antes. Un desbordamiento de pila no suele requerir la búsqueda a través de un programa completo, pero cuanto más tiempo pueda ejecutarse después de un desbordamiento, más difícil será el error de encontrar y arreglar.

OTROS IDIOMAS