如果函数在无限递归期间超出堆栈空间会发生什么?

ana*_*and 1 language-agnostic recursion operating-system

有一个函数可以无限地递归调用自身.

这个函数也有一些参数.

对于每个函数调用,参数和返回地址都被压入堆栈.

对于每个进程,都有固定大小的堆栈空间,不能像堆一样动态增长.我猜每个线程也有自己的堆栈.

现在,如果一个函数被无限地递归调用并且进程耗尽堆栈空间,会发生什么?

程序会崩溃吗?OS会处理这种情况吗?有4GB的地址空间,为什么操作系统无法做些什么来增加堆栈大小.

var*_*tec 6

堆栈溢出.

在UNIX和兼容过程中,进程将终止抛出SIGSEGVSIGSTKFLT信号.

在Windows中,进程将终止抛出异常STATUS_STACK_OVERFLOW.