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