什么是“双栈故障”?

时间:2012-08-09 15:44:27

标签: windows exception stack

我最近阅读了有关Windows异常处理的以下内容。

  

在某些未处理的异常中,例如双栈故障,操作系统将立即终止应用程序而不调用未处理的异常过滤器或JIT调试器。

什么是双栈故障?它与常规堆栈错误有何不同?

1 个答案:

答案 0 :(得分:7)

这句话可能来自这个Codeproject article。该网站的技术审查并不为人所熟知。 “双重故障”的真正含义与操作系统内核有关,当内核的故障处理程序响应用户模式故障时,您会遇到双重故障。这是致命的,并引发内核恐慌。 Windows上的蓝屏。也是处理器中存在的东西,x86核心在遭受“三重故障”时停止执行代码。

这里没有什么不好的,他在文章中描述意味着什么是一个条件,由于堆栈溢出导致程序爆炸,以及响应崩溃而运行的代码,例如注册UnhandledExceptionFilter()消耗Windows为线程尝试从SO恢复的最后一个堆栈。哪个不多,8192个字节(两页),可用的少于7080个字节。如果这样的代码消耗了该预留然后节目结束,则不能进行进一步的函数调用。内核引发访问冲突并无条件终止进程。

这个小的保留也是托管代码无法在SO中生存的原因,CLR需要太多的堆栈空间来反映异常,因此立即终止程序而不尝试。关于保护页面的通用背景文章,基础机制is here