velocidad ubicacion san ramon placas las falla extension desplazamiento cual atacama actividad c memory stack segmentation-fault stack-overflow

ubicacion - ¿Cuál es la diferencia entre una falla de segmentación y un desbordamiento de pila?



falla de atacama wikipedia (4)

El desbordamiento de pila es [a] causa, el resultado es una falla de segmentación.

Al menos en x86 y ARM, la "pila" es una pieza de memoria reservada para colocar variables locales y devolver direcciones de llamadas a funciones. Cuando se agota la pila, se accederá a la memoria fuera del área reservada. Pero la aplicación no le pidió al kernel esta memoria, por lo que se generará un SegFault para la protección de la memoria.

Por ejemplo, cuando llamamos decir, una función recursiva, las llamadas sucesivas se almacenan en la pila. Sin embargo, debido a un error si continúa infinitamente, el error es ''Error de segmentación'' (como se ve en GCC).

¿No debería haber sido ''desbordamiento de pila''? ¿Cuál es la diferencia básica entre los dos?

Por cierto, una explicación sería más útil que los enlaces de wikipedia (pasó por eso, pero no hay respuesta a una consulta específica).


Los procesadores modernos usan administradores de memoria para proteger procesos entre sí. El administrador de memoria x86 tiene muchas características heredadas, una de las cuales es la segmentación. La segmentación está destinada a evitar que los programas manipulen la memoria de ciertas maneras. Por ejemplo, un segmento puede estar marcado como de solo lectura y el código se colocará allí, mientras que otro segmento es de lectura / escritura y ahí es donde se ubican sus datos.

Durante un desbordamiento de pila, agota todo el espacio asignado a uno de sus segmentos, y luego su programa comienza a escribir en segmentos que el administrador de memoria no permite, y luego obtiene un error de segmentación.


Un desbordamiento de pila puede manifestarse como una excepción de desbordamiento de pila explícita (según el compilador y la arquitectura) o como una falla de segmentación, es decir, un acceso de memoria no válido. En última instancia, un desbordamiento de la pila es el resultado de quedarse sin espacio en la pila, y un posible resultado de quedarse sin espacio en la pila es leer o escribir en la memoria a la que no debe acceder. Por lo tanto, en muchas arquitecturas, el resultado de un desbordamiento de pila es un error de acceso a la memoria.


La pila de llamadas se está desbordando, sin embargo, el resultado del desbordamiento es que eventualmente los valores relacionados con las llamadas se introducen en la memoria que no forma parte de la pila y luego - ¡ SIGSEGV !