¿Por qué una función infinitamente recursiva en PHP causa un defecto de seguridad?

Una pregunta hipotética para que todos ustedes la mastiquen ...

ace poco, respondí otra pregunta sobre SO en la que un script PHP estaba segfaulándose, y me recordó algo que siempre me he preguntado, así que veamos si alguien puede arrojar alguna luz sobre él.

Considera lo siguiente

<?php

  function segfault ($i = 1) {
    echo "$i\n";
    segfault($i + 1);
  }

  segfault();

?>

Obviamente, esta función (inútil) se repite infinitamente. Y eventualmente, se quedará sin memoria porque cada llamada a la función se ejecuta antes de que la anterior haya terminado. Algo así como una bomba tenedor sin la horquilla.

Pero ... eventualmente, en las plataformas POSIX, el script morirá con SIGSEGV (también muere en Windows, pero con más gracia, hasta donde mis habilidades de depuración de bajo nivel extremadamente limitadas pueden decirlo). El número de bucles varía según la configuración del sistema (memoria asignada a PHP, 32 bits / 64 bits, etc., etc.) y el sistema operativo, pero mi verdadera pregunta es: ¿por qué sucede con un segfault?

¿Es esto simplemente cómo PHP maneja los errores de "falta de memoria"? ¿Seguramente debe haber una forma más elegante de manejar esto? ¿Es esto un error en el motor Zend? ¿Hay alguna forma de que esto se pueda controlar o manejar con mayor gracia desde un script PHP? ¿Existe alguna configuración que generalmente controle esa cantidad máxima de llamadas recursivas que se pueden realizar en una función?

Respuestas a la pregunta(3)

Su respuesta a la pregunta