相关疑难解决方法(0)

为什么PHP中的无限递归函数会导致段错误?

一个假设的问题,你们都要咀嚼......

我最近在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位等)和操作系统,但我真正的问题是 - 为什么会发生段错误?

  • 这只是PHP处理"内存不足"错误的方式吗?当然必须有更优雅的方式来处理这个问题?
  • 这是Zend引擎中的错误吗?
  • 有没有什么方法可以在PHP脚本中更好地控制或处理它?
  • 是否有任何设置通常控制可以在函数中进行的最大递归调用次数?

php segmentation-fault

31
推荐指数
1
解决办法
6563
查看次数

标签 统计

php ×1

segmentation-fault ×1