对于简单的代码和一个好的编译器没有区别,但是对于一个具有非终止递归函数的天真的编译器,您将耗尽堆栈空间,称为堆栈溢出。
至于会发生什么问题:在堆栈溢出中:堆栈被映射到旁边有未分配内存的位置或内存(每个进程)。堆栈用于存储本地函数值,当前函数返回地址也放在堆栈上,然后将传递给下一个函数的值放在堆栈上。从而为每个函数调用使用堆栈。因此,当cpu try的访问内存通过分配空间的末尾时,会导致内存访问异常,并将其解释为堆栈溢出。
一段时间内(1)操作系统的行为取决于操作系统使用的多任务行为。对于先发制人的系统(如window nt和更新版本),它只看到您的进程有很多工作要做,但如果它有ui,并且您没有响应它发送给您的窗口消息,您将得到经典的“此应用程序似乎已停止响应”消息。
如果你有一个非先发制人的操作系统,那么它会挂起,如果你不把控制权交还给操作系统,那么在Windows3.1中,打印机驱动程序会在打印时冻结整个系统。惠普的驱动程序做到了。
在嵌入式系统上,为了避免软件锁定,他们通常会有一个硬件定时器,叫做看门狗定时器,如果不是每秒钟“滴答”一次,就会重启系统。从而防止系统处于锁定状态。