一个供大家思考的假设性问题...
最近我在stackoverflow上回答了另一个问题,其中一个PHP脚本出现了segfault,这让我想起了一些我一直在想的东西,所以让我们看看是否有人能够给予任何启示。
考虑以下情况:
<?php
function segfault ($i = 1) {
echo "$i\n";
segfault($i + 1);
}
segfault();
?>
显然,这个(无用的)函数会无限循环。最终,由于每次调用该函数都在前一个完成之前执行,因此内存将耗尽。有点像一个没有分叉但会出现fork炸弹的东西。
但是... 最终,在POSIX平台上,脚本将以SIGSEGV死亡(它也会在Windows上死亡,但更为优雅-就我极其有限的低级调试技能而言)。循环次数因系统配置(分配给PHP的内存、32位/64位等等)和操作系统而异,但我的真正问题是-为什么会出现段错误?
- 这是否仅是PHP处理“内存不足”错误的方法?肯定有一种更为优雅的处理方式吧?
- 这是Zend引擎中的错误吗?
- 是否有任何方式可以在PHP脚本内部更加优雅地控制或处理这个问题?
- 是否有任何设置通常控制在函数中可以进行的递归调用的最大数量?
segfault
- 这肯定可以节省一些在办公室度过的漫长夜晚! - corsiKa