2012-08-09 151 views
7

我最近阅读了关于Windows异常处理的以下内容。什么是“双堆栈故障”?

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

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

回答

7

这个短语可能来自这个Codeproject article。该网站对技术审查并不熟知。 “双重故障”的真正含义与操作系统内核有关,当内核的故障处理程序对用户模式故障作出响应时会遇到故障,您会遇到双重故障。这是致命的并引发内核恐慌。 Windows上的蓝色屏幕。此外,处理器中还存在一些问题,x86核心在遭受“三重故障”时停止执行代码。

没什么坏在这里,他意味着在他的文章中描述的一个条件下的程序炸弹由于堆栈溢出,并在应对碰撞运行的代码,如用UnhandledExceptionFilter的注册()消耗Windows提供的线程尝试从SO恢复的堆栈的最后一部分。这并不多,8192字节(两页),可用的小于7080字节。如果这样的代码消耗了这个储备,那么节目结束,不能进行进一步的功能调用。内核引发访问冲突并无条件终止进程。

这个小的保留也是托管代码不能存活的原因,CLR需要太多的栈空间来反映异常,所以立即终止程序而不尝试。关于后卫页面的通用背景文章,其基本机制is here