递归函数c语言递归与循环的区别,while(1)无限循环和递归函数有什么区别?

堆栈溢出是由于无限递归或过度使用堆栈空间导致的问题,这可能会耗尽进程的堆栈。当CPU尝试访问超出分配的堆栈内存时,会导致内存访问异常。在不同操作系统中,响应方式各异:先发制人的系统可能显示应用无响应,而非先发制人的系统可能挂起或重启。在嵌入式系统中,看门狗定时器能防止系统锁定。
摘要由CSDN通过智能技术生成

对于简单的代码和一个好的编译器没有区别,但是对于一个具有非终止递归函数的天真的编译器,您将耗尽堆栈空间,称为堆栈溢出。

至于会发生什么问题:在堆栈溢出中:堆栈被映射到旁边有未分配内存的位置或内存(每个进程)。堆栈用于存储本地函数值,当前函数返回地址也放在堆栈上,然后将传递给下一个函数的值放在堆栈上。从而为每个函数调用使用堆栈。因此,当cpu try的访问内存通过分配空间的末尾时,会导致内存访问异常,并将其解释为堆栈溢出。

一段时间内(1)操作系统的行为取决于操作系统使用的多任务行为。对于先发制人的系统(如window nt和更新版本),它只看到您的进程有很多工作要做,但如果它有ui,并且您没有响应它发送给您的窗口消息,您将得到经典的“此应用程序似乎已停止响应”消息。

如果你有一个非先发制人的操作系统,那么它会挂起,如果你不把控制权交还给操作系统,那么在Windows3.1中,打印机驱动程序会在打印时冻结整个系统。惠普的驱动程序做到了。

在嵌入式系统上,为了避免软件锁定,他们通常会有一个硬件定时器,叫做看门狗定时器,如果不是每秒钟“滴答”一次,就会重启系统。从而防止系统处于锁定状态。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值