它几乎在每种语言中都可以找到,而且我大部分时间都在使用它。我不知道它是内部的,想知道它是如何工作的。
它如何在任何语言的运行时在本机级别工作?
例如:如果在 try 中发生 stackoverflow 或 dividebyzero,那么 catch 如何防止程序下降?
它几乎在每种语言中都可以找到,而且我大部分时间都在使用它。我不知道它是内部的,想知道它是如何工作的。
它如何在任何语言的运行时在本机级别工作?
例如:如果在 try 中发生 stackoverflow 或 dividebyzero,那么 catch 如何防止程序下降?
声明“在任何语言的运行时处于本机级别”是矛盾的。异常处理的所有本机部分都依赖于平台,而不是语言。异常处理的某些部分甚至依赖于硬件(例如,除以零总是硬件异常。)
在 .NET、Windows、x86 上除以零的特定情况下,它是这样的:
通常,您可以将异常视为带有指向某些线程本地状态信息(异常)的指针的长跳转。跳远的目标通常在编译时就知道了。
也不是每种语言都内置了异常处理。例如,C 没有结构化的异常处理。
当抛出异常并且控制从 try 块传递到处理程序时,运行时调用自 try 块开始以来构造的所有自动对象的析构函数。这个过程称为堆栈展开。