有一个函数可以无限地递归调用自身.
这个函数也有一些参数.
对于每个函数调用,参数和返回地址都被压入堆栈.
对于每个进程,都有固定大小的堆栈空间,不能像堆一样动态增长.我猜每个线程也有自己的堆栈.
现在,如果一个函数被无限地递归调用并且进程耗尽堆栈空间,会发生什么?
程序会崩溃吗?OS会处理这种情况吗?有4GB的地址空间,为什么操作系统无法做些什么来增加堆栈大小.
堆栈溢出.
在UNIX和兼容过程中,进程将终止抛出SIGSEGV
或SIGSTKFLT
信号.
在Windows中,进程将终止抛出异常STATUS_STACK_OVERFLOW
.