什么是"双栈故障"?

chi*_*tom 7 windows stack exception

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

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

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

Han*_*ant 7

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

没有什么坏在这里,他的意思在他的文章中描述的一个条件下的程序炸弹由于堆栈溢出,并在应对死机,如用UnhandledExceptionFilter的(注册运行)的代码,会消耗堆栈的最后一位Windows提供了一个尝试从SO恢复的线程.哪个不多,8192个字节(两页),可用的少于7080个字节.如果这样的代码消耗了该预留然后节目结束,则不能进行进一步的函数调用.内核引发访问冲突并无条件终止进程.

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