一个假设的问题,你们都要咀嚼......
我最近在SO上回答了另一个问题,其中一个PHP脚本是segfaulting,它让我想起了我一直想知道的东西,所以让我们看看是否有人可以对它有所了解.
考虑以下:
<?php
function segfault ($i = 1) {
echo "$i\n";
segfault($i + 1);
}
segfault();
?>
Run Code Online (Sandbox Code Playgroud)
显然,这个(无用的)函数无限循环.最终,由于每个对函数的调用都是在前一个调用完成之前执行的,因此会耗尽内存.有点像没有分叉的叉形炸弹.
但是......最终,在POSIX平台上,脚本会死于SIGSEGV(它也会死在Windows上,但更优雅 - 只要我极其有限的低级调试技能可以说明).循环次数取决于系统配置(分配给PHP的内存,32位/ 64位等)和操作系统,但我真正的问题是 - 为什么会发生段错误?